如何解决Erlang如何从此二进制<<“ a,b,c” >>列出列表
|| 我有一个二进制“ 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”。实际上不使用最后一个被剪切的代码,而是链接的方法。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。