Frage

Wie füge ich zwei Binärdateien in Erlang?

Zum Beispiel, lassen Sie uns sagen, ich habe:

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

Wie kann ich verketten B1 und B2 eine binäre B3 zu schaffen, ist << >> 1,2,3,4?

Der Grund mir dies zu fragen, weil ich Code schreibe ein Paket für einige Netzwerkprotokolle zu kodieren. Ich bin der Umsetzung dieser von Encodern für die Felder in dem Paket zu schreiben, und ich brauche diese Felder zu verketten das ganze Paket aufzubauen.

Vielleicht mache ich das der falsche Weg. Soll ich das Paket als eine Liste von ganzen Zahlen aufzubauen und die Liste in einem binären im letzten Moment umwandeln?

War es hilfreich?

Lösung

Die Antwort ist nicht. gen_tcp: Senden Sie wird tief Listen akzeptieren. So Verkettung ist einfach:

B3 = [B1, B2].

Dies ist O (1). Im Allgemeinen, wenn mit dieser Art von Daten immer aufbauen tief Listenstrukturen und lassen Sie die io-Routinen geht die Struktur am Ausgang zu tun. Die einzige Komplikation ist, dass alle Zwischenroutinen tief Listen akzeptieren haben.

Andere Tipps

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

einen io_list verwenden, könnten Sie tun:

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

Was ist schön und gut lesbar. Sie können auch Listen und Dinge in dort verwenden, wenn es bequemer ist.

auf der letzten Antwort zu erstellen:

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

verwenden, um die erlang Funktion list_to_binary (List) die Dokumentation finden Sie hier: http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top