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