如何正确地将整数转换为位串?

How correctly convert integer to bitstring?

我有一个问题:使用新库(loom,ofs_handler,of_driver)我需要发送设置消息来切换。 我必须这样创建记录:

-record(ofp_field, {
          class = openflow_basic :: ofp_field_class(),
          name :: ofp_field_type(),
          has_mask = false :: boolean(),
          value :: bitstring(),
          mask :: bitstring()
         }).

但是'value'必须是位串,我不知道如何正确地将端口号(例如8080、6633)转换为位串,因为我可以制作<<Port>>, <<Port:32/integer>>并得到不同的结果。 有谁知道如何让它正确吗?
或者我必须使用 binary:encode_unsigned?

在OpenFlow协议中,TCP和UDP端口号用16位整数表示(参见1.4.0规范中的table12)。因此你应该写 <<Port:16>>.

OpenFlow 自始至终使用 big-endian 整数(即网络字节顺序),如果您不指定其他字节顺序,这就是 Erlang 生成的内容,因此代码可以在任何平台上正常工作。 (在 C 语言中,您必须在主机字节顺序和网络字节顺序之间进行转换。)请参阅 "Bit Syntax Expressions in the Erlang Reference Manual" 了解如何使用不同的字节顺序,如果您需要它用于其他一些协议。