【发布时间】:2014-02-03 19:36:03
【问题描述】:
我正在使用以下十六进制值表示 GPS/GPRS 图中的不同值。全部以 32 位整数形式给出。
例如:
296767 是为十六进制数报告的十进制值(无符号):3F870400
另一个:
34.96987500 是在弧度分辨率 10^(-8) 上给出的十进制浮点值(有符号),报告为 DA4DA303。
在 Ruby 上将十六进制数字转换为相应值的过程是什么?
我已经尝试使用以下指令解包/打包:L、H 和 h。还尝试添加二进制补码并将它们转换为二进制然后十进制,但没有成功。
【问题讨论】:
-
您能提供更多参考资料吗? 296767 是 '0x0004873F'.to_i(16) 。 . .该数字是首先提供的 32 位 int 最低有效字节。我不确定浮点数是如何编码的。
-
@NeilSlater 关于浮点数,是一个 32 位有符号整数,必须乘以 10^(-8) 才能获得弧度分辨率的预期值( 34.96987500 )。
-
如果你把
34.96987500 * 10^8转换成十六进制,你会得到D06FCB6C。 -
知道了:34.96987500 是度数 - 你应该这么说!得到它的转换是
'03A34DDA'.to_i(16) * 180 / (Math::PI * 10 ** 8) -
实际上是字节(8 位,2 个十六进制数字),而不是半字节(4 位,1 个十六进制数字)。