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