【问题标题】:Toggle little / big endian in unpack() in Ruby 1.8.7在 Ruby 1.8.7 的 unpack() 中切换小/大端
【发布时间】:2014-05-08 01:13:42
【问题描述】:

在 Ruby 1.9.3 中,您可以这样做

    "\x00\x01".unpack 'S' #=> 1 * 256 + 0 = 256, my machine use little endian by default
    "\x00\x01".unpack 'S>' #=> 0 * 256 + 1 = 1

但是 Ruby 1.8.7 没有 ">" "

【问题讨论】:

  • 你的例子弄混了吗?您已经交换了第二个示例中的 x00x01 字节格式,它们都等于 1。
  • 你是对的,固定的。谢谢。

标签: ruby ruby-1.8.7


【解决方案1】:
str = "\x00\x01"
puts str.unpack 'S'

p str.reverse
puts str.reverse.unpack 'S'


--output:--
256
"\001\000"
1

【讨论】:

  • 你真的应该添加一些解释。
  • 我的错。我也在考虑这个方法。这里唯一的缺点是需要了解机器的字节序。
【解决方案2】:

您可以将 n 用于网络(大)端 2 字节值(N 用于 4 字节整数)和 v 用于小端 2 字节整数(V 用于 4 字节)。见the docs

"\x00\x01".unpack 'n'
# => [1] 
"\x00\x01".unpack 'v'
# => [256]

如果可能的话,你真的应该考虑升级你的 Ruby 版本。

【讨论】:

  • 谢谢。我应该指出 - 有没有这样的方法来处理有符号整数?
猜你喜欢
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多