【问题标题】:Getting the size in bytes of an arbitrary integer获取任意整数的字节大小
【发布时间】:2015-11-20 14:44:10
【问题描述】:

给定一个整数,比如 98749287,是否有一些内置/库函数(Erlang 或 Elixir)用于获取字节大小?

为了澄清,用于表示二进制数字的最小字节数。

看起来很简单,并且已经使用“除以基数”方法编写了一个函数,然后计算位,但是在搜索文档几个小时后,没有找到任何看起来有用的东西。

【问题讨论】:

  • OOC,你想做什么?
  • 我必须使用基本编码规则对一些整数进行编码(将任意整数部分打包成 7 位系列)。
  • 有一个适用于 Erlang 的 ASN.1 模块,效果很好。根据您的整体需求,这可能是一个更好的选择(我经常使用它!)。

标签: erlang elixir


【解决方案1】:

试试这个表达式:

Value = (... your input ...),
NumBytes = size(integer_to_binary(Value, 2) + 7) div 8.

参考:http://www.erlang.org/doc/man/erlang.html#integer_to_binary-2

【讨论】:

  • 这似乎有效。尽管留下了必须四舍五入的杂乱小数。关于 +7 的想法是什么?
  • +7 是尝试四舍五入。请将除法更改为地板或整数除法,如 C 运算符 /
  • div 8 代替/ 8 进行整数除法。
【解决方案2】:

如果你有一个无符号整数,你可以使用下面的sn-p:

byte_size(binary:encode_unsigned(Integer))

例子:

1> byte_size(binary:encode_unsigned(3)).
1
2> byte_size(binary:encode_unsigned(256)).
2
3> byte_size(binary:encode_unsigned(98749287)).
4

【讨论】:

  • 正是我想要的。学习 Elixir 的问题在于它很容易忘记 Erlang 文档(或者更确切地说是“避免”)。现在可以扔掉一些功能了。
  • 是的,可能很棘手。这仅在您使用 OS X 时才有帮助,但我通常使用 Dash 并同时在 Erlang 和 Elixir 文档中搜索“整数”、“二进制”和“大小”等内容。这是查找可能相关函数的好方法。
猜你喜欢
  • 1970-01-01
  • 2012-12-29
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 1970-01-01
  • 2010-10-07
相关资源
最近更新 更多