让一个由一个空字节分隔的消息组成的二进制字符串:
<message><null><message><null> ... <message><null>
我想拆分它们。很简单,我做到了:
binary:split(Bin,<<0>>,[global]),
但。。。
但一条消息由两部分组成:
<length><texte>
长度有 4 个字节的固定大小,长度可以有空字节!
然后拆分函数无法正确剪切字符串。
根据二郎语,是否存在一种方式?
如果所有消息都有 4 字节长度的标头,我建议使用 erlang:decode_packet(Type,Bin,Options)
其中 Type
设置为 4
.这将返回{ok, Message, Rest}
其中Message
是您的第一条消息,Rest
是二进制文件的其余部分。只需冲洗并重复,直到到达二进制文件的末尾(您可能需要自己处理中间的空字节)。
但是,如果并非所有消息都具有 4 字节长度的前缀,并且没有确定性方法来检测该标头,则可能无法可靠地解析此类列表。