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

Ale*_*lev 3 erlang integer openflow

我有一个问题:使用新的libs(loom,ofs_handler,of_driver)我需要发送设置消息给switch.我必须创建这样的记录:

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

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

leg*_*cia 5

在OpenFlow协议中,TCP和UDP端口号表示为16位整数(参见1.4.0规范中的表12).所以你应该写<<Port:16>>.

OpenFlow使用大端整数(即网络字节顺序),如果你没有指定另一个字节序,这就是Erlang生成的,这样代码就可以在任何平台上正常工作.(在C中,您必须在主机和网络字节顺序之间进行转换.)如果您需要其他协议,请参阅"Erlang参考手册中的位语法表达式",了解如何使用不同的字节序.