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

时间:2012-06-16 11:47:42

标签: erlang

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

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

我想分开他们。我很容易:

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

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

<length><texte>

length的长度为4字节,长度可以为空字节! 然后拆分功能无法正确剪切字符串 根据二郎的艺术状态存在一种方式吗?

1 个答案:

答案 0 :(得分:5)

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

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