如何在 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 中将整数转换为二进制?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 elixir 中将二进制转换为 base10(十进制)整数