我想解码GPS导航消息,其中标记了一些参数,例如:
如此指示的参数应为二进制补码,并带有符号位 (+或-)占据MSB
例如,我要存储一个参数af0
,该参数具有22个位数,其中第22位为MSB。
参数af0
已由我解码,现在我需要执行两者的补码操作。我使用af0
整数类型存储了uint32_t
。
还有其他参数,例如IDOT
,它具有14位数字,我使用uint16_t
存储了它。
我不确定,但是如果我理解正确,是否必须检查MSB 1 或 0 。如果是 1 ,我可以
只需通过取反(和强制转换)值int32_t af0_i = -(int32_t)af0
来计算两者的补数。如果MSB为 0 ,我只是根据int32_t af0_i = (int32_t)af0
投射值。
这对uintX_t
整数类型正确吗?我还尝试了:https://stackoverflow.com/a/34076866/6518689,但它没有解决我的问题,值保持不变。