Je suis en train de faire un entier en binaire:entier Binary Erlang
543 = <<"543">>
Comment puis-je faire sans
integer_to_list(list_to_binary(K)).
Je suis en train de faire un entier en binaire:entier Binary Erlang
543 = <<"543">>
Comment puis-je faire sans
integer_to_list(list_to_binary(K)).
Si vous voulez convertir 543-< < « 543 » >> Je ne pense pas que vous pouvez trouver quelque chose plus vite que:
1> list_to_binary(integer_to_list(543)).
<<"543">>
Parce que dans ce cas, les fonctions mises en œuvre en C.
Si vous voulez convertir entier à la plus petite représentation binaire possible, vous pouvez utiliser la fonction binary:encode_unsigned du nouveau module binary comme ceci:
1> binary:encode_unsigned(543).
<<2,31>>
2> binary:encode_unsigned(543, little).
<<31,2>>
Vous pouvez essayer quelque chose comme
6> A = 12345.
12345
7> B = <<A:32>>.
<<0,0,48,57>>
Mais cela nécessite de connaître le nombre maximum de bits à l'avance.
Bonne idée, mais si je ne sais pas. N'y at-il pas une option binaire sans les deux points pour le faire. J'ai essayé _ ne fonctionnait pas. – BAR
Vous pouvez toujours effectuer la conversion par étapes. (A rem 4294967296) pour chaque 32 bits et boucle. –
Pour les lecteurs actuels, ceci est maintenant implémenté dans R16, voir http://erlang.org/doc/man/erlang.html#integer_to_binary-1
Est-ce que ce ne devrait pas être list_to_binary (integer_to_list (Int))? – hdima
Je pense que ce qu'il voulait dire, c'est que générer une chaîne entièrement fonctionnelle dans erlang prend trop de mem (car sa liste de caractères est liée, donc avec chaque lettre elle consomme 32 bits ou 64 bits supplémentaires pour passer au caractère suivant dans la chaîne) – test30
Je doute fortement que les devs erlang fassent des chaînes une liste chaînée de caractères. Je n'ai pas vérifié moi-même mais je ne peux pas imaginer une telle utilisation inefficace de la liste liée dans la production. – BAR