1

我有一个 erlang 应用程序,其中包括解析来自套接字(TCP 和 UDP)的二进制数据。二进制数据是根据一些特定的协议,所以我的 TCP 和 UDP sock 选项如下:

TCP 袜子:
Opts = [二进制,{packet,0},{reuseaddr,true},
            {keepalive, true}, {backlog, 30}, {active, false}],
UDP 袜子:
[二进制,{active,once},{recbuf,2097152}]

现在,当我解析从套接字获得的数据时,我确实喜欢这样(在 UNIX 上):

    << 版本:4/大无符号整数单位:8,
       长度:2/大无符号整数:8,
       _Rest/二进制 >> = Bin_event_From_Socket。

现在,当在 LINUX 上运行时,这会给我一个问题,因为 LINUX 是基于小端的。所以,对我来说,这里的选项是在上面的代码中将“大”转换为“小”。

但是,Erlang 是一种基于 VM 的语言,我必须具备一些编写平台无关代码的便利。我搜索了 NET,但找不到太多关于它的信息。

那么,这里的问题是如何编写独立于平台的套接字数据解析代码?

谢谢。

4

2 回答 2

3

代替bigorlittle您可以使用 endianness native。这将默认为您所在平台的正确字节序。

于 2012-05-12T08:16:01.663 回答
0

这是我在 Dmitry 的 erlang 邮件列表中得到的答案。

http://erlang.org/pipermail/erlang-questions/2012-May/066692.html

于 2012-05-12T09:57:30.903 回答