1

让一个由一个空字节分隔的消息组成的二进制字符串:

<message><null><message><null> ... <message><null>

我想把它们分开。简单,我愿意:

binary:split(Bin,<<0>>,[global]),

但是...
但是一条消息由两部分组成:

<length><texte>

长度有一个 4 字节的固定大小,长度可以有空字节!
然后 split 函数无法正确切割字符串。
是否存在根据 erlang state of art 的方法?

4

1 回答 1

5

如果所有消息都有一个 4 字节长度的标头,我建议使用erlang:decode_packet(Type,Bin,Options)where Typeis set to 4。这将返回您的第一条消息在哪里,并且{ok, Message, Rest}是二进制文件的其余部分。只需冲洗并重复直到到达二进制文件的末尾(您可能必须自己处理中间的空字节)。MessageRest

但是,如果并非所有消息都具有 4 字节长度的前缀,并且没有确定的方法来检测该标头,则可能无法可靠地解析这样的列表。

于 2012-06-16T12:44:06.443 回答