Как объединить два бинарных файла в Erlang?
Как объединить два двоичных файла в Erlang?
Например, скажем, у меня есть:
B1 = <<1,2>>.
B2 = <<3,4>>.
Как объединить B1 и B2 для создания двоичного B3, который равен < 1,2,3,4 → ?
Я прошу об этом, потому что я пишу код для кодирования пакета для какого-то сетевого протокола. Я реализую это путем написания кодеров для полей в пакете, и мне нужно объединить эти поля, чтобы создать весь пакет.
Возможно, я делаю это неправильно. Должен ли я создать пакет в виде списка целых чисел и преобразовать список в двоичный файл в последний момент?
Ответы
Ответ 1
Ответ - нет. gen_tcp: send примет глубокие списки. Итак, конкатенация просто:
B3 = [B1, B2].
Это O (1). В общем, при работе с такими типами данных всегда создаются структуры глубоких списков и разрешается io-процедурам перемещаться по структуре на выходе. Единственное осложнение состоит в том, что любые промежуточные подпрограммы будут принимать глубокие списки.
Ответ 2
28> B1= <<1,2>>.
<<1,2>>
29> B2= <<3,4>>.
<<3,4>>
30> B3= <<B1/binary, B2/binary>>.
<<1,2,3,4>>
31>
Ответ 3
Чтобы использовать io_list, вы можете сделать:
erlang:iolist_to_binary([<<"foo">>, <<"bar">>])
Это хорошо и разборчиво. Вы можете также использовать списки и вещи там, если это более удобно.
Ответ 4
Чтобы опираться на последний ответ:
bjoin(List) ->
F = fun(A, B) -> <<A/binary, B/binary>> end,
lists:foldr(F, <<>>, List).
Ответ 5
используйте функцию erlang list_to_binary (Список), вы можете найти здесь документацию:
http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1