拆分内部包含空字节的二进制字符串



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

<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 字节长度的前缀,并且没有确定性方法来检测该标头,则可能无法可靠地解析此类列表。

最新更新