kay*_*kay 16
你确实使用了正确的方法.
binary_to_list(二进制) - > [char()]
返回与二进制字节对应的整数列表.
Erlang中没有字符串类型:http://www.erlang.org/doc/reference_manual/data_types.html#id63119.如果所有元素都在可打印的ASCII范围内,控制台只会以字符串形式显示列表.
您应该阅读Erlang的"位语法表达式"文档,以了解如何处理二进制文件.
如果您不需要列表表示,请不要将整个二进制文件转换为列表!
要提取您可以使用的前三个字节
<<A, B, C, Rest/binary>> = <<"aaa","bbb","ccc">>.
Run Code Online (Sandbox Code Playgroud)
如果要迭代二进制数据,可以使用二进制理解.
<< <<(F(X))>> || <<X>> <= <<"aaa","bbb","ccc">> >>.
Run Code Online (Sandbox Code Playgroud)
模式匹配也是可能的:
test(<<A, Tail/binary>>, Accu) -> test(Tail, Accu+A);
test(_, Accu) -> Accu.
882 = test(<<"aaa","bbb","ccc">>, 0).
Run Code Online (Sandbox Code Playgroud)
即使是一次读取一个UTF-8字符.因此,要将二进制UTF-8字符串转换为Erlang的"代码点列表"格式,您可以使用:
test(<<A/utf8, Tail/binary>>, Accu) -> test(Tail, [A|Accu]);
test(_, Accu) -> lists:reverse(Accu).
[97,97,97,600,99,99,99] = test(<<"aaa", 16#0258/utf8, "ccc">>, "").
Run Code Online (Sandbox Code Playgroud)
(注意:`<<"aaa","bbb","ccc">> = <<"aaabbbccc">>实际上不要使用剪切的最后一个代码,而是使用链接的方法.)