【发布时间】:2016-07-06 13:06:02
【问题描述】:
我正在从 ublox GPS 模块接收 24 位长位域(4 字节消息中的 3 个字节)的数据,我需要将这些 24 位数据域转换为带符号的十进制值,但我找不到说明如何在规范中做到这一点。我也知道模块附带的另一个程序的某些值。
对于正值,它似乎只是简单地将 24 位二进制数转换为 dec,仅此而已,例如0x000C19 = 3097 和 0x000BD0 = 3024 ,但是对于负数,我遇到了麻烦。 2 的补码似乎不起作用。以下是一些已知值:0xFFFFC8 = -57、0xFCB9FE = -214528、0xFF2C3B = -54215 和 0xFFFA48 = -1462。使用 2 的补码,每次转换都会减少几个数字(分别为 -56、-214530、-54213、-1464)。 (十六进制数字用于避免每次都写 24 位数字。)
提前感谢您的帮助!
【问题讨论】:
-
您确定硬件附带的程序计算出正确的否定结果吗?
-
@MoralesBatovski,问题不是“为什么这段代码不起作用?”,而是“这个黑盒程序在做什么?”。
-
“知道的价值观”看起来很奇怪,你从哪里得到的?我怀疑这是一个转换问题,有时它们小于 2-complent,有时更高
-
您给出的对应关系与符号位和每个值位具有一致位值的任何单个整数格式都不一致。因此,我倾向于猜测执行转换的程序由于某种原因正在失去精度。
-
代码将ubox设置为什么模式?通信协议是否设置为:NEMA。 UBX,时间脉冲,到底是什么?您的软件设置使用什么波特率?您确实需要发布您的代码,以便我们有机会回答您的问题。
标签: c labwindows 24-bit