- 16 位带符号整数的范围是 [-32768, 32767]。
原始数据是无符号整数 0x0000 ~ 0xFFFF(即 0 ~ 65535)。
当数据需要转换为有符号整数时:
若数值大于等于 32768,它表示负数。为了将其转换为正确的负数值,需要减去 65536。
对于正数部分(小于 32768),数据本身不需要调整。
在这里的代码中,减 32768 是因为高字节已经表明这是负数
- else 分支的条件是 str.substring(2, 4).toInt(16) < 128,表示高字节不超过 0x7F,即该数值是 正数。
由于正数在无符号和带符号的表示中值是相同的,因此无需减 32768。
然而,else 分支将结果直接取反(0 - ...),因为原始数据是相对于某个坐标轴对称的,需要取反来调整为实际的坐标值。
- 最后,可以得出结果:
当原始数据表示负数时(高字节大于等于 128),需要进行此转换。
当原始数据表示正数时(高字节小于 128),不需要减去 32768。
问 计算坐标时是否需要减32768?