-1

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

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

感觉完全是矫枉过正。我发现了其他关于将其转换为字符串的问题,但没有发现关于整数的问题。有没有办法在我的解决方案中不先通过字符串来实现这一点?


示例值和结果:

foobar 112628796121458
barbaz 108170670399866
123456 54091677185334
4

1 回答 1

0

使用以下代码:

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

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

归功于 Sergio Tulentsev的代码。

于 2019-07-29T07:54:28.747 回答