【问题标题】:Why does using char math result in unexpected results in C++?为什么在 C++ 中使用 char 数学会导致意外结果?
【发布时间】:2021-01-07 15:06:49
【问题描述】:

我有一个函数,我很难理解数学是如何执行的:

    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 似乎减一? 任何帮助,将不胜感激。谢谢

【问题讨论】:

    标签: c++ math char unsigned


    【解决方案1】:

    您的环境中的 char 似乎已签名,并且值 0xAF 已符号扩展为值行 0xFFFFFFAF。这将导致0xFF 被添加到b2 的一部分,因此看起来b2 减少了1。

    您应该将b1 转换为unsigned char 以避免这种情况。

        unsigned short StartCRC = static_cast<unsigned char>(b1) + b2*256;
    

    【讨论】:

    • 迈克 感谢您的回复。就是这样。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多