tuplas atom erlang binaries

atom - list in erlang



¿Cómo concateno dos binarios en Erlang? (5)

¿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 estoy preguntando 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 todo el paquete.

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


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

B3 = [B1, B2].

Este es O (1). En general, al tratar 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á aceptar listas profundas.


Para construir sobre la última respuesta:

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


Para usar una io_list, podrías hacer:

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

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



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