53 votes

Comment concaténer deux fichiers binaires dans Erlang?

Comment concaténer deux binaires en Erlang?

Par exemple, disons que j'ai:

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

Comment concaténer B1 et B2 pour créer un fichier binaire B3 qui est <<1,2,3,4>>?

La raison que je demande c'est parce que je suis en train d'écrire le code pour coder un paquet pour certaines protocole de gestion de réseau. Je me suis mise en œuvre de ce par écrit les encodeurs pour les champs dans le paquet et j'ai besoin de concaténer ces champs pour construire le paquet entier.

Peut-être que je fais mal. Dois-je construire le paquet sous la forme d'une liste d'entiers et de convertir la liste des binaires au dernier moment?

38voto

cthulahoops Points 2626

La réponse est non. gen_tcp: send acceptera les listes détaillées. La concaténation est donc simplement:

 B3 = [B1, B2].
 

C'est O (1). En général, lorsque vous manipulez ce type de données, créez toujours des structures de liste détaillées et laissez les routines io parcourir la structure en sortie. La seule complication est que toutes les routines intermédiaires devront accepter des listes détaillées.

20voto

David N. Welton Points 1156

Pour utiliser une liste d'io, vous pouvez faire:

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

Ce qui est agréable et lisible. Vous pouvez également utiliser des listes et des éléments si cela vous convient plus facilement.

13voto

pommonico Points 261

Pour construire sur la dernière réponse:

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

8voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X