我有一个函数,我很难理解数学是如何执行的:
unsigned long Fat_AuthAnswer(char b1, char b2, char b3, char b4)`
{
unsigned char* ptr = NULL;
unsigned short StartCRC = b1 + b2*256;
unsigned long ret = crcbuf(StartCRC, b3, &AuthBlock[b4]);
ret = (ret & 0x0000ffff) | (crcbuf(StartCRC, b4, &AuthBlock[b3])<<16);
}
b1=0xAF b2=0x50
当函数被执行时,StartCRC=b1+b2*256;产生起始CRC=0x4FAF
我本以为StartCRC的结果是0x50AF。
我的问题是,为什么b2似乎减少了一?如有任何帮助,我们将不胜感激。感谢
您的环境中的char
似乎已签名,并且值0xAF
已符号扩展到值行0xFFFFFFAF
。这将导致0xFF
被添加到b2
的一部分,因此看起来b2
减少了一。
您应该将b1
强制转换为unsigned char
以避免这种情况。
unsigned short StartCRC = static_cast<unsigned char>(b1) + b2*256;