如何将double转换为hex?

All*_*lyn 5 ruby double hex byte

如何将具有高字节和低字节的ruby float/double转换为高端序十六进制.

例:

start with 99.0
Run Code Online (Sandbox Code Playgroud)

以结束

40 58 C0 00   00 00 00 00
high bytes    low bytes
Run Code Online (Sandbox Code Playgroud)

ram*_*ion 6

好吧,就像Patrick说的那样,转换过去使用它并不需要太多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"]
Run Code Online (Sandbox Code Playgroud)

因此,它取决于您是要使用零索引中的高位字节还是零索引中的低位字节来解压缩它:

      E     |  Double-precision float, little-endian byte order
      G     |  Double-precision float, network (big-endian) byte order
Run Code Online (Sandbox Code Playgroud)