Erlang:在每个字符上拆分二进制文件

Erlang:在每个字符上拆分二进制文件,erlang,Erlang,我编写了一个函数,可以将二进制文件拆分为每个字符,但我觉得有一种更简单的方法: my_binary_to_list(<<H,T/binary>>) -> %slightly modified version of http://erlang.org/doc/efficiency_guide/binaryhandling.html [list_to_binary([H])|my_binary_to_list(T)]; my_binary_to_list(<

我编写了一个函数,可以将二进制文件拆分为每个字符,但我觉得有一种更简单的方法:

my_binary_to_list(<<H,T/binary>>) ->
%slightly modified version of http://erlang.org/doc/efficiency_guide/binaryhandling.html
    [list_to_binary([H])|my_binary_to_list(T)];
my_binary_to_list(<<>>) -> [].

> my_binary_to_list(<<"ABC">>).
[<<"A">>,<<"B">>,<<"C">>]
my\u binary\u to\u list()->
%略加修改的版本http://erlang.org/doc/efficiency_guide/binaryhandling.html
[list_to_binary([H])| my_binary_to_list(T)];
我的二进制文件到列表()->[]。
>我的\u二进制\u到\u列表()。
[,,]
我认为这可能是混乱的,因为
list\u to\u二进制([H])
,因为
H
应该已经是二进制了


我尝试直接使用该链接函数,但得到了
“AA”
,这不是我想要的。然后我尝试了
[H]
,得到了
[“A”、“B”、“C”]
,这也不是我想要的

您可以将列表理解与位字符串生成器一起使用(
您可以从单个字节创建二进制,而无需创建列表并调用
list\u to\u binary
,如下所示:

my_binary_to_list(<<H,T/binary>>) ->
    [<<H>>|my_binary_to_list(T)];

嗯,这在我的基准测试中似乎也更快了,谢谢!
my_binary_to_list(<<H,T/binary>>) ->
    [<<H>>|my_binary_to_list(T)];
1> [<<X>> || <<X>> <= <<"ABC">>].
[<<"A">>,<<"B">>,<<"C">>]
2> [X || <<X:1/binary>> <= <<"ABC">>].
[<<"A">>,<<"B">>,<<"C">>]
1> Bin = binary:copy(<<"?">>, 1000000).
<<"????????????????????????????????????????????????????????????????????????????????????????????????????????????????????"...>>
2> timer:tc(fun() -> [<<X>> || <<X>> <= Bin] end).
{14345634,
 [<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<...>>|...]}
3> timer:tc(fun() -> [X || <<X:1/binary>> <= Bin] end).
{7374003,
 [<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
  <<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<...>>|...]}