问题描述
||
我有一个二进制“ 0”,我想从该二进制中提取信息。
所以我想要像
A=a,B=b
之类的东西。
我需要一个通用的方法,因为二进制字符串总是在变化。
所以可能是<<\"aaa\",\"bbb\",\"ccc\">>
...
我试图生成一个列表
erlang:binary_to_list(<<\"a\",\"b\",\"c\">>)
但是我得到的结果是字符串。
\"abc\"
谢谢。
解决方法
您确实使用了正确的方法。
binary_to_list(二进制)-> [char()]
返回与Binary字节对应的整数列表。
Erlang中没有字符串类型:http://www.erlang.org/doc/reference_manual/data_types.html#id63119。如果所有元素都在可打印的ASCII范围内,则控制台仅会以字符串表示形式显示列表。
您应该阅读Erlang的\“ Bit Syntax Expressions \”文档,以了解如何使用二进制文件。
如果您不需要列表表示形式,则不要将整个二进制文件转换为列表!
要提取前三个字节,您可以使用
<<A,B,C,Rest/binary>> = <<\"aaa\",\"bbb\",\"ccc\">>.
如果要遍历二进制数据,则可以使用二进制理解。
<< <<(F(X))>> || <<X>> <= <<\"aaa\",\"ccc\">> >>.
模式匹配也是可能的:
test(<<A,Tail/binary>>,Accu) -> test(Tail,Accu+A);
test(_,Accu) -> Accu.
882 = test(<<\"aaa\",\"ccc\">>,0).
即使一次读取一个UTF-8字符也是如此。因此,要将二进制UTF-8字符串转换为Erlang的\“代码点列表\”格式,可以使用:
test(<<A/utf8,[A|Accu]);
test(_,Accu) -> lists:reverse(Accu).
[97,97,600,99,99] = test(<<\"aaa\",16#0258/utf8,\"\").
(请注意,“ 9”。实际上不使用最后一个被剪切的代码,而是链接的方法。)