《2450雷达上报数据解析参考.doc》中,需要减32768(右图)。《LD2450 串口通信协议 V1.03.pdf》中,没有减32768(左图)。
所以,请问,计算坐标时是否需要减32768?如果需要,为什么 >= 128 的时候需要,else的时候不需要?
原始数据是无符号整数 0x0000 ~ 0xFFFF(即 0 ~ 65535)。
当数据需要转换为有符号整数时:
若数值大于等于 32768,它表示负数。为了将其转换为正确的负数值,需要减去 65536。
对于正数部分(小于 32768),数据本身不需要调整。
在这里的代码中,减 32768 是因为高字节已经表明这是负数
由于正数在无符号和带符号的表示中值是相同的,因此无需减 32768。
然而,else 分支将结果直接取反(0 - ...),因为原始数据是相对于某个坐标轴对称的,需要取反来调整为实际的坐标值。
当原始数据表示负数时(高字节大于等于 128),需要进行此转换。
当原始数据表示正数时(高字节小于 128),不需要减去 32768。