Pregunta

¿Cómo concateno dos binarios en Erlang?

Por ejemplo, digamos que tengo:

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

¿Cómo concateno B1 y B2 para crear un B3 binario que es < < 1,2,3,4 > > ;?

La razón por la que pregunto esto es porque estoy escribiendo código para codificar un paquete para algún protocolo de red. Estoy implementando esto escribiendo codificadores para los campos en el paquete y necesito concatenar esos campos para construir el paquete completo.

Tal vez estoy haciendo esto de manera incorrecta. ¿Debo construir el paquete como una lista de enteros y convertir la lista a un binario en el último momento?

¿Fue útil?

Solución

La respuesta es no. gen_tcp: send aceptará listas profundas. Entonces, la concatenación es simplemente:

B3 = [B1, B2].

Esto es O (1). En general, cuando se trata con este tipo de datos, siempre construya estructuras de listas profundas y deje que las rutinas io recorran la estructura en la salida. La única complicación es que cualquier rutina intermedia tendrá que aceptar listas profundas.

Otros consejos

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 una io_list, puede hacer:

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

Lo cual es agradable y legible. También puede usar listas y cosas allí si es más conveniente.

Para construir sobre la última respuesta:

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

usa la función erlang list_to_binary (List) puedes encontrar la documentación aquí: http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top