有使用Erlang字符串转义插值问题。第四个字节不插入为"\0"
,而是"\052"
。
1> Bin = <<"M\0\0\0522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,0110,00,150,0,0,0\0">>.
<<77,0,0,42,50,48,51,57,51,53,53,48,57,57,44,48,49,48,49,
48,48,48,48,48,48,48,56,44,48,...>>
所以你必须以这种方式写它。
2> f().
ok
3> Bin = <<"M\0\0\0","522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,0110,00,150,0,0,0\0">>.
<<77,0,0,0,53,50,50,48,51,57,51,53,53,48,57,57,44,48,49,
48,49,48,48,48,48,48,48,48,56,...>>
然后通常解析这种形式的消息的方式是:
4> <<L:32/little,Rest/binary>> = Bin.
<<77,0,0,0,53,50,50,48,51,57,51,53,53,48,57,57,44,48,49,
48,49,48,48,48,48,48,48,48,56,...>>
5> L.
77
6> <<Msg:L/binary,R/binary>> = Rest.
<<"522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,0110,00,150,0,0,0"...>>
7> R.
<<0>>
8> Msg.
<<"522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,0110,00,150,0,0,0">>
是的,现在知道字符串我同意你,它应该是Message_length和Msg模式反弹错误。与R15B01(测试)相同的结果。 –
77之后有两个空值,S三个空值!!?我不明白模式反弹的概念。 – Bertaud
@ Bertaud \ OOO实际上是在寻找3个数字,它们指定一个3位数的八进制数。所以在这种情况下,你有八进制:0,0,052(十进制42)。模式反弹意味着您正尝试将一个值重新分配给已绑定的变量,如果这些值不完全相同,将导致您提到的错误。 – marcelog