我有一个 erlang 应用程序,其中包括解析来自套接字(TCP 和 UDP)的二进制数据。二进制数据是根据一些特定的协议(protocol),所以我的 TCP 和 UDP sock 选项如下:
TCP socks :
Opts = [二进制,{packet,0},{reuseaddr,true},
{keepalive, true}, {backlog, 30}, {active, false}],
UDP socks :
[二进制,{active,once},{recbuf,2097152}]
现在,当我解析从套接字获得的数据时,我确实喜欢这样(在 UNIX 上):
<< 版本:4/大无符号整数单位:8,
长度:2/大无符号整数:8,
_Rest/二进制 >> = Bin_event_From_Socket。
现在,当在 LINUX 上运行时,这会给我一个问题,因为 LINUX 是基于小端的。所以,对我来说,这里的选项是在上面的代码中将“大”转换为“小”。
但是,Erlang 是一种基于 VM 的语言,我必须具备一些编写平台无关代码的便利。我搜索了 NET,但找不到太多关于它的信息。
那么,这里的问题是如何编写独立于平台的套接字数据解析代码?
谢谢。
最佳答案
而不是 big
或 little
您可以使用字节序 native
.这将默认为您所在平台的正确字节序。
关于sockets - 编写平台无关的基于 Socket 的二进制解析代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10561808/