有使用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