如何在Erlang中连接两个二进制文件?
例如,假设我有:
B1 = <<1,2>>.
B2 = <<3,4>>.
Run Code Online (Sandbox Code Playgroud)
如何连接B1和B2以创建二进制B3,即<< 1,2,3,4 >>?
我问这个的原因是因为我正在编写代码来编码某个网络协议的数据包.我通过为数据包中的字段编写编码器来实现这一点,我需要连接这些字段以构建整个数据包.
也许我这样做是错误的.我应该将数据包构建为整数列表,并在最后一刻将列表转换为二进制文件吗?
小智 124
28> B1= <<1,2>>.
<<1,2>>
29> B2= <<3,4>>.
<<3,4>>
30> B3= <<B1/binary, B2/binary>>.
<<1,2,3,4>>
31>
Run Code Online (Sandbox Code Playgroud)
cth*_*ops 37
答案是不.gen_tcp:send将接受深层列表.所以,连接只是:
B3 = [B1, B2].
Run Code Online (Sandbox Code Playgroud)
这是O(1).通常,在处理这类数据时总是会构建深层列表结构,并让io例程在输出处遍历结构.唯一的复杂因素是任何中间例程都会接受深度列表.
Dav*_*ton 18
要使用io_list,您可以:
erlang:iolist_to_binary([<<"foo">>, <<"bar">>])
Run Code Online (Sandbox Code Playgroud)
哪个好看又清晰.如果更方便的话,你也可以在里面使用列表和东西.
小智 13
建立最后的答案:
bjoin(List) ->
F = fun(A, B) -> <<A/binary, B/binary>> end,
lists:foldr(F, <<>>, List).
Run Code Online (Sandbox Code Playgroud)