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

Posted

技术标签:

【中文标题】如何在 Erlang 中将整数转换为二进制?【英文标题】:How do I convert an integer to a binary in Erlang? 【发布时间】:2011-04-29 23:17:24 【问题描述】:

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

543 = <<"543">>

如果没有,我怎么能做到这一点

integer_to_list(list_to_binary(K)).

【问题讨论】:

不应该是list_to_binary(integer_to_list(Int))吗? 我认为他的意思是在 erlang 中生成全功能字符串需要太多的内存(因为它的字符链表,所以每个字母消耗额外的 32 位或 64 位指向字符串中下一个字符的指针) 我非常怀疑 erlang 开发人员将字符串作为字符的链接列表。我没有检查过自己,但我无法想象在生产中如此低效地使用链表。 【参考方案1】:

你可以试试

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

但这需要你提前知道最大位数。

【讨论】:

好主意,但如果我不知道怎么办。没有冒号就没有二元选项。我试过_没用。 您始终可以分步进行转换。 (一个 rem 4294967296)每个 32 位和循环。【参考方案2】:

如果您想将 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>>

【讨论】:

【参考方案3】:

对于当前的读者,这现在在 R16 中实现,请参阅 http://erlang.org/doc/man/erlang.html#integer_to_binary-1

【讨论】:

以上是关于如何在 Erlang 中将整数转换为二进制?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby 中将字符串或整数转换为二进制?

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

如何在 elixir 中将二进制转换为 base10(十进制)整数

如何在 Android 中将颜色整数转换为十六进制字符串?

如何在JavaScript中将数字的二进制表示从字符串转换为整数?

如何在Javascript中将整数转换为具有固定长度的十六进制?