Подтвердить что ты не робот

Как объединить два бинарных файла в Erlang?

Как объединить два двоичных файла в Erlang?

Например, скажем, у меня есть:

B1 = <<1,2>>.
B2 = <<3,4>>.

Как объединить B1 и B2 для создания двоичного B3, который равен < 1,2,3,4 → ?

Я прошу об этом, потому что я пишу код для кодирования пакета для какого-то сетевого протокола. Я реализую это путем написания кодеров для полей в пакете, и мне нужно объединить эти поля, чтобы создать весь пакет.

Возможно, я делаю это неправильно. Должен ли я создать пакет в виде списка целых чисел и преобразовать список в двоичный файл в последний момент?

4b9b3361

Ответ 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).