2009-04-08 12 views

Trả lời

6

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 
0

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]