如何转换红宝石浮动/双高endian顺序十六进制高字节和低字节。

实施例

start with 99.0

结了

40 58 C0 00   00 00 00 00
high bytes    low bytes
有帮助吗?

解决方案

好了,像帕特里克所述时,它不采取了很多过去使用Array\#pack转换。

irb> [99.0].pack('G').split('').map { |ds| ds[0] }
#=> [64, 88, 192, 0, 0, 0, 0, 0]
irb> _.map { |d| "%02x" % d }
#=> ["40", "58", "c0", "00", "00", "00", "00", "00"]
irb> [99.0].pack('E').split('').map { |ds| ds[0] }
#=> [0, 0, 0, 0, 0, 192, 88, 64]
irb> _.map { |d| "%02x" % d }    
#=> ["00", "00", "00", "00", "00", "c0", "58", "40"]

所以,这取决于您是否要在零指数高位字节或零指数低位字节把它解压到:

      E     |  Double-precision float, little-endian byte order
      G     |  Double-precision float, network (big-endian) byte order

其他提示

阵列类有一个包的方法:

a = [99.0]
s = a.pack("d")
s
=> "\000\000\000\000\000\300X@"

这给你一个字节串,而是来自转换为十六进制打印应该是微不足道的。

如果你想要去的其他方式,String类有一个解压方法:

s.unpack("d")
=>[99.0]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top