C++ qbytearray.at()到无符号整数
好的,我有一个关于将QByteArray中的元素(应该是字符对吗?)转换为无符号整数的两部分问题 这是我的密码: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 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无符号整数
static_cast<unsigned int>(static_cast<unsigned char>(data_read_buffer.at(2)));
static_cast(static_cast(data_read_buffer.at(2)));
字符类型通常是有符号的。虽然这并不明显,但您将其扩展为32位作为有符号值,然后将其重新解释为无符号值。如果插入一个静态\u强制转换
,则将加宽一个无符号值。谢谢。现在有道理了。