Sto cercando di fare un intero in un binario:intero a binario Erlang
543 = <<"543">>
Come posso fare questo senza
integer_to_list(list_to_binary(K)).
Sto cercando di fare un intero in un binario:intero a binario Erlang
543 = <<"543">>
Come posso fare questo senza
integer_to_list(list_to_binary(K)).
Se si desidera convertire 543-< < "543" >> Io non credo che si possa trovare qualcosa di più veloce di:
1> list_to_binary(integer_to_list(543)).
<<"543">>
Perché in questo caso entrambe le funzioni implementate in C.
Se si desidera convertire intero al più piccolo rappresentazione binaria possibile è possibile utilizzare la funzione binary:encode_unsigned dal nuovo modulo binary in questo modo:
1> binary:encode_unsigned(543).
<<2,31>>
2> binary:encode_unsigned(543, little).
<<31,2>>
Si può provare qualcosa di simile
6> A = 12345.
12345
7> B = <<A:32>>.
<<0,0,48,57>>
Ma questo richiede di conoscere il numero massimo di bit in anticipo.
Buona idea, ma cosa succede se non lo so. Non c'è un'opzione binaria senza i due punti per farlo. Ho provato _ non ha funzionato. – BAR
È sempre possibile eseguire la conversione in passaggi. (A rem 4294967296) per ogni 32 bit e loop. –
Per i lettori attuali, questo è ora implementato in R16, vedi http://erlang.org/doc/man/erlang.html#integer_to_binary-1
Non dovrebbe essere list_to_binary (integer_to_list (Int))? – hdima
Penso che intendesse dire che la generazione di stringhe completamente funzionali in erlang richiede troppi mem (perché è un elenco di caratteri collegati, quindi con ogni lettera consuma più 32 bit o 64 bit per puntatore al prossimo carattere in stringa) – test30
Dubito fortemente che gli sviluppatori di erlang abbiano creato una lista di caratteri collegati. Non ho controllato me stesso, ma non posso immaginare un uso così inefficiente dell'elenco collegato in produzione. – BAR