问题描述:
使用Qt中的QByteArray进行串口数据的读取操作时,发现会出现计算错误,于是进行debug调试,发现当数据超过127时,就会出现负值。
原因分析:
细心的小伙伴已经发现了,QByteArray里面存储的是char字符型,范围是-128~127,当大于127时,就会变成负值,如上图调试图,当计算时会按负值进行计算,这就是问题所在。
解决方案:
只需将QByteArray中的char类型转化成unsigned char类型就解决了。 有以下几种方法:
QByteArray ba;
ba[0]=0xb0;
qDebug() << (int)ba[0];
qDebug() << (uchar)ba[0];
qDebug() << (ba[0] & 0xff);
qDebug() << static_cast<unsigned char>(ba[0]);
qDebug() << (ba[0]*256);
qDebug() << (uchar)ba[0]*256;
qDebug() << (ba[0]&0xff*256);
qDebug() << ((ba[0]&0xff)*256);