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”。实际上不使用最后一个被剪切的代码,而是链接的方法。)     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...