【问题标题】:How to convert an octet string to a number?如何将八位字节字符串转换为数字?
【发布时间】:2019-07-27 16:06:10
【问题描述】:

我正在尝试将八位字节字符串转换为 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

【问题讨论】:

    标签: ruby integer data-conversion octetstring


    【解决方案1】:

    使用以下代码:

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

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

    感谢 Sergio Tulentsev 获取代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多