2010-10-24 14 views
12

I eine ganze Zahl in eine binäre zu machen versuche:Integer zu Binär Erlang

543 = <<"543">> 

Wie kann ich dies tun, ohne

integer_to_list(list_to_binary(K)). 
+2

Sollte es nicht list_to_binary (integer_to_list (Int)) sein? – hdima

+0

Ich denke, was er meinte, ist, dass das Generieren voll funktionsfähige Zeichenfolge in Erlang zu viel Speicher (wegen seiner verknüpften Liste von Zeichen, so mit jedem Buchstaben verbraucht zusätzliche 32-Bit oder 64-Bit für Zeiger auf nächste Zeichen in Zeichenfolge) – test30

+0

Ich bezweifle sehr, dass die Erlang-Entwickler Zeichenfolgen zu einer verketteten Liste von Zeichen gemacht haben. Ich habe mich selbst nicht überprüft, aber ich kann mir eine derart ineffiziente Verwendung der verknüpften Liste in der Produktion nicht vorstellen. – BAR

Antwort

27

Wenn Sie 543-< < „543“ konvertieren möchten >> Ich glaube nicht, dass Sie etwas schneller als finden:

1> list_to_binary(integer_to_list(543)). 
<<"543">> 

Da in diesem Fall beide Funktionen implementiert in C

Wenn Sie ganze Zahl auf die kleinstmögliche binäre Darstellung konvertieren möchten, können Sie binary:encode_unsigned Funktion aus dem neuen binary Modul wie folgt verwenden:

1> binary:encode_unsigned(543). 
<<2,31>> 
2> binary:encode_unsigned(543, little). 
<<31,2>> 
4

Sie können so etwas wie

6> A = 12345.      
12345 
7> B = <<A:32>>. 
<<0,0,48,57>> 

versuchen Aber das erfordert, dass Sie die maximale Anzahl von Bits im Voraus wissen.

+0

Gute Idee, aber was ist, wenn ich es nicht weiß. Gibt es keine binäre Option ohne den Doppelpunkt, um es zu tun? Ich habe versucht _ hat nicht funktioniert. – BAR

+0

Sie können die Konvertierung immer in Schritten durchführen. (A rem 4294967296) für jede 32 Bits und Schleife. –