gpt4 book ai didi

erlang - 二进制文件的 split

转载 作者:行者123 更新时间:2023-12-02 22:38:42 28 4
gpt4 key购买 nike

我试图从二进制字符串中拆分两个字段:

-define(S,<<"M\0\0\0522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,‌​0110,00,150,0,0,0\0">>).<<Message_length:4/binary,Msg/binary>> = S.

前4个字节是后面消息的长度,其他字节是消息,
空字节终止字符串。

结果是:** 异常错误:o 右侧值匹配
编辑在给定的代码之前,有:

[Sequence|Reste] = binary:split(T,<<"\0">>),

“Reste”是否有界?

最佳答案

您的代码没问题,所以要么您没有二进制字符串,要么 Mystring 的长度不符合模式。这是一个快速测试:

1> Mystring = <<"abcde">>.
<<"abcde">>
2> <<Message_length:4/binary,Msg/binary>> = Mystring.
<<"abcde">>
3> Message_length.
<<"abcd">>
4> Msg.
<<"e">>

如果你有一个字符串(整数列表)而不是二进制字符串(<<"string">>),正如 Vincenzo 所建议的,首先调用 erlang:list_to_binary/1。

希望对你有帮助

编辑:我已经检查了您在 Vincenzo 的回答评论中留下的示例字符串。我已经用你的代码试过了,但仍然有效。当到达那行代码时,Message_length 和/或 Msg 是否可能已经绑定(bind)(并且与 Mystring 不同)?那会使模式匹配失败。

EDIT2:使用问题中的更新数据进行测试:

1> S = <<"M\0\0\0522039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,\342\200\214\342\200\2130110,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> <<Message_length:4/binary,Msg/binary>> = S.
<<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,...>>
3> Message_length.
<<77,0,0,42>>
4> Msg.
<<"2039355099,010100000008,0,010170000000,0,0,0,0,0,0,,,0,0,,\342"...>>

关于erlang - 二进制文件的 split ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11053673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com