QByteArray转int时,有个坑,会出现负值

问题描述:

使用Qt中的QByteArray进行串口数据的读取操作时,发现会出现计算错误,于是进行debug调试,发现当数据超过127时,就会出现负值。

在这里插入图片描述


原因分析:

细心的小伙伴已经发现了,QByteArray里面存储的是char字符型,范围是-128~127,当大于127时,就会变成负值,如上图调试图,当计算时会按负值进行计算,这就是问题所在。

解决方案:

只需将QByteArray中的char类型转化成unsigned char类型就解决了。 有以下几种方法:
QByteArray ba;
ba[0]=0xb0; 
qDebug() << (int)ba[0];  //-80
qDebug() << (uchar)ba[0]; //176
qDebug() << (ba[0] & 0xff); //176
qDebug() << static_cast<unsigned char>(ba[0]); //176
qDebug() << (ba[0]*256); //-20480 错误 -80*256
qDebug() << (uchar)ba[0]*256; //45056 正确
qDebug() << (ba[0]&0xff*256);  //65280 错误  优先级的问题 请加括号
qDebug() << ((ba[0]&0xff)*256); //45056 正确

猜你喜欢

转载自blog.csdn.net/qq_41750806/article/details/120037424
今日推荐