> 中创建一个列表-6ren"> > 中创建一个列表-我有一个二进制文件>我想从这个二进制文件中提取信息。 所以我想要类似 A=a, B=b 的东西等等。我需要一个通用的方法来解决这个问题,因为二进制字符串总是会发生变化。 所以可能是> ... 我尝试生-6ren">
gpt4 book ai didi

string - Erlang 如何从这个二进制文件 <<"a,b,c">> 中创建一个列表

转载 作者:行者123 更新时间:2023-12-02 13:46:15 30 4
gpt4 key购买 nike

我有一个二进制文件<<"a,b,c">>我想从这个二进制文件中提取信息。

所以我想要类似 A=a, B=b 的东西等等。我需要一个通用的方法来解决这个问题,因为二进制字符串总是会发生变化。

所以可能是<<"aaa","bbb","ccc">> ...

我尝试生成一个列表

erlang:binary_to_list(<<"a","b","c">>) 

但我得到了字符串作为结果。

"abc"

谢谢。

最佳答案

您确实使用了正确的方法。

binary_to_list(Binary) -> [char()]

Returns a list of integers which correspond to the bytes of 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","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">> 。实际上并不使用最后截取的代码,而是使用链接的方法。)

关于string - Erlang 如何从这个二进制文件 <<"a,b,c">> 中创建一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142120/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com