运算符“+”发生了什么?

What happened to operator '+'?

我正在使用 Qt Creator(社区版)构建一个软件,它可以从具有 RS-485 连接的设备读取数据。

我真的不知道我做错了什么。请检查这张图片:

iBienSuCo1 += result[18] 之前一切都很好。我不知道数据来自哪里。 这种情况有什么想法吗?

这是我对你的问题的理解,

#include <iostream>
using namespace std;

int main() {
    unsigned int i = -1;
    ++i;
    i += -64;
    cout << i << endl;
}

所以在 i 被添加到 -64 之前,那是你的 iBieSucol,它是 unsigned int 并且它的值是 UINT_MAX(对于 32 位)。然后你减去 64。

result[17] 是一个 char 值 0x00。

result[18] 是 0xC0 的 char 值。

您的编译器将 char 实现为有符号类型,因此编译器会将 char 值符号扩展为 signed int,然后 assigning/adding 将其扩展为 unsigned int 变量。 0xC0的高位为1,所以扩展位补1,得到0xFFFFFFFC0,解释为无符号整数时为4294967232,解释为有符号整数时为-64。

要完成您想要做的事情,请改用它:

iBienSuCo1 = (unsigned char)result[17];
iBienSuCo1 = (iBienSuCo1 << 8) | (unsigned char)result[18];

通过在扩展前将 char 转换为 unsigned char(而不是 unsigned int!),编译器将对值进行零扩展(扩展位用 0 填充)而不是符号扩展。这将产生您要查找的结果 0x000000C0。

live demo