Ruby将64位IEEE 754十六进制转换为double

时间:2013-04-11 17:03:41

标签: ruby ieee-754 pack unpack

我需要将一个十六进制数据流从IMU输出到lat long和height值。

数据以双精度十六进制字符串形式出现,我需要将它们输出为十进制值。

我尝试了几个打包和解压缩值但最终除了编写自己的函数之外无法找到解决方案。

有没有办法翻译这个双精度64位十六进制字符串:

"4044F33333333333"

进入这个小数:

41.900000000000000

使用打包和解包功能?

是否有任何图书馆能够处理IEEE 754号码?

1 个答案:

答案 0 :(得分:6)

["4044F33333333333"].pack('H16').unpack('G').first
=> 41.9

# broken down to steps, showing reversability
["4044F33333333333"].pack('H16')
=> "@D\xF333333"
"@D\xF333333".unpack('G')
=> [41.9]
[41.9].pack('G')
=> "@D\xF333333"
"@D\xF333333".unpack('H16')
=> ["4044f33333333333"]