Pergunta

Como faço para concatenar dois binários em Erlang?

Por exemplo, digamos que eu tenho:

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

Como faço para B1 e B2 concatenar para criar um B3 binário que é << 1,2,3,4 >>?

A razão que eu estou pedindo é porque eu estou escrevendo código para codificar um pacote por algum protocolo de rede. Estou implementando isso escrevendo encoders para os campos no pacote e eu preciso para concatenar os campos para construir o pacote inteiro.

Talvez eu estou fazendo isso da maneira errada. Devo construir o pacote como uma lista de números inteiros e converter a lista para um binário no último momento?

Foi útil?

Solução

A resposta é não. gen_tcp: send aceita listas de profundidade. Assim, a concatenação é simplesmente:

B3 = [B1, B2].

Este é O (1). Em geral, quando se lida com este tipo de dados sempre construir estruturas Lista fundo e deixou as rotinas io andar a estrutura na saída. A única complicação é que nenhum rotinas intermediários terá aceitar listas de profundidade.

Outras dicas

28> B1= <<1,2>>.
<<1,2>>
29> B2= <<3,4>>.
<<3,4>>
30> B3= <<B1/binary, B2/binary>>.
<<1,2,3,4>>
31>

Para usar um io_list, você poderia fazer:

erlang:iolist_to_binary([<<"foo">>, <<"bar">>])

O que é bom e legível. Você também pode usar listas e coisas lá se é mais conveniente.

Para construir na última resposta:

bjoin(List) ->
    F = fun(A, B) -> <<A/binary, B/binary>> end,
    lists:foldr(F, <<>>, List).

usar o list_to_binary função erlang (Lista), você pode encontrar a documentação aqui: http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top