如何在Erlang中将整数转换为二进制?

16

我正在尝试将一个整数转换为二进制:

543 = <<"543">>

我如何在不使用......的情况下实现这个?

integer_to_list(list_to_binary(K)).

2
难道不应该是list_to_binary(integer_to_list(Int))吗? - hdima
我认为他的意思是,在Erlang中生成完全功能的字符串需要太多的内存(因为它是字符的链接列表,所以每个字母都会消耗额外的32位或64位指向字符串中下一个字符的指针)。 - test30
我非常怀疑Erlang开发人员将字符串作为字符的链表。虽然我没有亲自检查过,但我无法想象在生产中使用这样低效的链表。 - BAR
4个回答

32

如果你想将543转换为<<"543">>,我认为你找不到比以下更快的方法:

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

因为在这种情况下,两个函数都是用C实现的。

如果您想将整数转换为可能的最小二进制表示形式,可以使用新的binary模块中的binary:encode_unsigned函数,像这样:

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

19

5
你可以尝试类似以下的操作:
6> A = 12345.                       
12345
7> B = <<A:32>>.
<<0,0,48,57>>

但这需要您事先知道最大位数。

好主意,但如果我不知道怎么办?没有冒号的二进制选项可以做到吗?我尝试过但没成功。 - BAR
你可以一步一步地进行转换。对于每32位和循环,使用(A rem 4294967296)。 - Daniel Luna

0
我找到了这个问题,因为我想要将一个以整数形式写成的二进制数进行“打印表示”。以下是如何实现这一点的方法:
1> integer_to_list(543, 2).
"1000011111"

第二个参数是您想要的基数,它可以接受从2到36的任何值(现在去维基百科上阅读关于base36编码的内容)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接