如何将八位字节字符串转换为数字?

How to convert an octet string to a number?

我正在尝试将八位字节字符串转换为 Ruby 中的整数。
现在我有这个解决方案:

def octet_string_to_i(str)
  str.bytes.map { |v| format('%08b', v) }.join.to_i(2)
end

感觉完全矫枉过正。我发现了有关将其转换为字符串的其他问题,但 none 关于整数。有什么方法可以在不像我的解决方案那样先通过字符串的情况下实现这一目标吗?


示例值和结果:

foobar 112628796121458
barbaz 108170670399866
123456 54091677185334

使用以下代码:

str.bytes.reverse_each.with_index.sum {|elem, idx| elem << (idx * 8) }

基本上,我们通过将字节加到一个总和来减少字节,使用它们的索引将每个字节移动到适当的位置。这避免了必须先转换为字符串然后再转换回来,并获得相同的结果。

代码归功于 Sergio Tulentsev