您确实使用了正确的方法。
binary_to_list(Binary) -> [char()]
返回与二进制字节对应的整数列表。
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","bbb","ccc">> >>.
模式匹配也是可能的:
test(<<A, Tail/binary>>, Accu) -> test(Tail, Accu+A);
test(_, Accu) -> Accu.
882 = test(<<"aaa","bbb","ccc">>, 0).
即使是一次读取一个 UTF-8 字符。所以要将convert a binary UTF-8 string 转换为 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">>, "").
(注意`<<"aaa","bbb","ccc">> = <<"aaabbbccc">>。实际上不要使用最后截取的代码,而是使用链接方法。)