C++ qbytearray.at()到无符号整数

C++ qbytearray.at()到无符号整数,c++,qt,unsigned-integer,static-cast,qbytearray,C++,Qt,Unsigned Integer,Static Cast,Qbytearray,好的,我有一个关于将QByteArray中的元素(应该是字符对吗?)转换为无符号整数的两部分问题 这是我的密码: QByteArray data_read_buffer; unsigned int data_recieved_size = 0; /* the code below is an external function that populates the QbyteArray. shouldn't be important putting only to show that I a

好的,我有一个关于将QByteArray中的元素(应该是字符对吗?)转换为无符号整数的两部分问题

这是我的密码:

QByteArray data_read_buffer;

unsigned int data_recieved_size = 0;

/* the code below is an external function that populates the QbyteArray. shouldn't be important putting only to show that I assign a value to the byteArray./*

readFromComPortSafe(data_read_buffer); 

data_recieved_size  = static_cast<unsigned int>((data_read_buffer.at(2)));
QByteArray数据读取缓冲区;
接收到的无符号整数数据大小=0;
/*下面的代码是填充QbyteArray的外部函数。不应该只是为了显示我给byteArray赋值才重要/*
readFromComPortSafe(数据读取缓冲区);
数据接收大小=静态转换(数据读取缓冲区位于(2));
嗯。因此,我返回的数据_received_size的结果是错误的“每隔一段时间”我进入调试器,当我检查数据_read_buffer的值时,我得到以下结果:

\000\003\203\00\205。。。。(我们与乌姆劳特有某种性格)

当我检查数据的值时,我得到4294967171

所以我的第一个问题是

从char到unsigned int的转换是否有问题

我的第二个问题是:

\203在qByteArray中代表什么?我想我不明白我在看什么。据我所知,字符类型是unicode字符????我希望QByteArray中的第二个元素是0x83或131。如何转换为\203

如果有人能提供一些关于这一点的见解,我将不胜感激


谢谢

char
s可以签名也可以不签名,这取决于您的平台,在您的情况下,它们是已签名的

想想调用
data\u read\u buffer时会发生什么。在
处,返回值是
-125

  • -125
    作为
    char
    0x83
  • 然后将该值转换为
    static_cast
    内的
    int
    ,即
    0xffffff83
  • static\u cast
    现在将此值强制转换为
    unsigned int
    ,它只复制位(至少在两个补码机器上是这样)
  • 0xFFFF83
    作为
    无符号整数
    是4294967171
如果要强制转换为unsigned int并避免符号扩展,则需要执行以下操作

static_cast<unsigned int>(static_cast<unsigned char>(data_read_buffer.at(2)));
static_cast(static_cast(data_read_buffer.at(2)));

字符类型通常是有符号的。虽然这并不明显,但您将其扩展为32位作为有符号值,然后将其重新解释为无符号值。如果插入一个
静态\u强制转换
,则将加宽一个无符号值。

谢谢。现在有道理了。