如何在Erlang中连接两个二进制文件?
如何在Erlang中连接两个二进制文件?
例如,假设我有:
B1 = <<1,2>>. B2 = <<3,4>>.
如何连接B1和B2来创build一个“1,2,3,4”的二进制B3?
我问这个的原因是因为我正在编写代码来编码一些networking协议的数据包。 我通过编写数据包中的字段编码器来实现这一点,我需要连接这些字段来构build整个数据包。
也许我这样做是错误的。 我应该build立一个整数列表的数据包,并在最后时刻将列表转换为二进制文件?
答案是不。 gen_tcp:发送将接受深度列表。 所以,串联只是简单的:
B3 = [B1, B2].
这是O(1)。 一般来说,处理这类数据时总是会build立深层的列表结构,并让input的io例程遍历结构。 唯一的麻烦就是任何中间例程都会接受深层的列表。
28> B1= <<1,2>>. <<1,2>> 29> B2= <<3,4>>. <<3,4>> 30> B3= <<B1/binary, B2/binary>>. <<1,2,3,4>> 31>
build立在最后的答案:
bjoin(List) -> F = fun(A, B) -> <<A/binary, B/binary>> end, lists:foldr(F, <<>>, List).
要使用io_list,你可以这样做:
erlang:iolist_to_binary([<<"foo">>, <<"bar">>])
这是好的,清晰的。 如果更方便的话,还可以使用列表和内容。
使用erlang函数list_to_binary(List)你可以在这里find文档: http ://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary / 1