问题概述:crc-8计算crc时,异或运算计算结果异常
解决方案:在移位操作时,待移位数需要与目标移位数的字节数相同。
比如:
char a = 8;
a <<= 8;
运算结果任然是1个字节
这时如果和一个16字节数字进行异或运算:
int b = 12;
int c = b^a;
运行结果:c=12
由此,得出:在运行移位操作时,如果期望移位后字节数大于原始声明字节时,编译器不会自动扩充,需要在声明时主动声明符合移位后最大字节的数据类型。
其它知识点:
1ull 此时1移位时可以最大字节数为unsigned long long 。
1ul 对应unsigned long
其它依次类推
crc计算时可以8位8位的进行运算:
通过每次提取出数据的前八位来与多项式进行异或运算,结果再向后取到8位,重复运算,直到达到最后。