今天进行程序移植的时候,发现CRC校验总是通过不了。开始分步查询时,发现我设置的无符号整型数,打印出来竟然是个负值!这也太诡异了。捣鼓半天,终于整明白了。程序之前用的芯片是8位机,编译系统估计是16位的,定义的数据类型是 unsigned int,在16位及以下系统中,无符号整型是2个字节的数据。现在换到了32位机,在32位的编译器下,unsigned int 默认是32位数据。由于我需要的返回值是对计算结果进行取反,然后再返回。这样计算结果默认32位时,进行取反,高位全变成了 1 .而我的接受数据类型是 16位的,接收的时候把32位数据的高位当成了符号位接收,结果全部判定为复数。重新定义数据,全部严格设置为16位,而不再使用 unsigned int这种靠编译器定义的数据位,问题得到了结果。
最后,为了程序的可移植性,少用取反吧!!!