Làm cách nào để chuyển đổi một dấu phẩy ruby / kép thành hex cao cấp có byte cao và byte thấp.Làm thế nào để chuyển đổi một đôi để hex?
VÍ DỤ:
start with 99.0
cuối với
40 58 C0 00 00 00 00 00
high bytes low bytes
Làm cách nào để chuyển đổi một dấu phẩy ruby / kép thành hex cao cấp có byte cao và byte thấp.Làm thế nào để chuyển đổi một đôi để hex?
VÍ DỤ:
start with 99.0
cuối với
40 58 C0 00 00 00 00 00
high bytes low bytes
Vâng, like Patrick said, nó không mất rất nhiều để chuyển đổi qua sử dụng 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"]
Vì vậy, nó phụ thuộc vào việc bạn muốn giải nén nó bằng byte bậc cao trong chỉ mục zero hoặc byte thứ tự thấp trong không index:
E | Double-precision float, little-endian byte order
G | Double-precision float, network (big-endian) byte order
Lớp mảng có một phương thức đóng gói:
a = [99.0]
s = a.pack("d")
s
=> "\000\000\000\000\000\[email protected]"
này mang đến cho bạn một chuỗi byte, nhưng chuyển đổi từ đó đến hex cho in ấn là tầm thường.
Nếu bạn muốn đi theo con đường khác, lớp chuỗi có một phương pháp giải nén:
s.unpack("d")
=>[99.0]