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,
[<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,
<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<"?">>,<<...>>|...]}