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

时间:2016-05-11 14:50:57

标签: integer erlang openflow

我有一个问题:使用新的libs(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

1 个答案:

答案 0 :(得分:5)

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

OpenFlow在整个过程中使用大端整数(即网络字节顺序),如果你没有指定另一个字节序,那么这就是Erlang生成的,这样代码就可以在任何平台上正常工作。 (在C中,您必须在主机和网络字节顺序之间进行转换。)如果您需要其他协议,请参阅"Bit Syntax Expressions in the Erlang Reference Manual"了解如何使用不同的字节顺序。