如何解决为什么在 C++ 中使用 char 数学会导致意外结果?
我有一个函数,我很难理解数学是如何执行的:
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;产量 StartCRC = 0x4FAF
我原以为 StartCRC 的结果是 0x50AF。
我的问题是为什么 b2 似乎减一? 任何帮助,将不胜感激。谢谢
解决方法
您环境中的 char
似乎是有符号的,并且值 0xAF
被符号扩展到值行 0xFFFFFFAF
。这将导致 0xFF
添加到 b2
的那部分,因此看起来 b2
减一。
您应该将 b1
转换为 unsigned char
以避免这种情况。
unsigned short StartCRC = static_cast<unsigned char>(b1) + b2*256;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。