开发者

Erlang howto make a list from this binary <<"a,b,c">>

I have a binary <<"a,b,c">> and I would like to extract the information from this binary.

So I would like to have something like A=a, B=b and so on. I need a general approach on this because the binary string always changes.

So it could be <<"aaa","bbb","ccc">>...

I tried to generate a list

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

but I get string as a 开发者_开发技巧result.

"abc"

Thank you.


You did use the right method.

binary_to_list(Binary) -> [char()]

Returns a list of integers which correspond to the bytes of Binary.

There is no string type in Erlang: http://www.erlang.org/doc/reference_manual/data_types.html#id63119. The console just displays the lists in string representation as a courtesy, if all elements are in printable ASCII range.

You should read Erlang's "Bit Syntax Expressions" documentation to understand how to work on binaries.

Do not convert the whole binary into a list if you don't need it in list representation!

To extract the first three bytes you could use

<<A, B, C, Rest/binary>> = <<"aaa","bbb","ccc">>.

If you want to iterate over the binary data, you can use binary comprehension.

<< <<(F(X))>> || <<X>> <= <<"aaa","bbb","ccc">> >>.

Pattern matching is possible, too:

test(<<A, Tail/binary>>, Accu) -> test(Tail, Accu+A);
test(_, Accu) -> Accu.

882 = test(<<"aaa","bbb","ccc">>, 0).

Even for reading one UTF-8 character at once. So to convert a binary UTF-8 string into Erlang's "list of codepoints" format, you could use:

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">>, "").

(Note that `<<"aaa","bbb","ccc">> = <<"aaabbbccc">>. Don't actually use the last code snipped but the linked method.)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜