Qt知识点1『16进制数值与文本互相转换』
工作中可能会遇到QByteArray保存着16进制的数据,例如网络传输中的数据在抓包软件下就会显示为16进制的文本格式。本次是在串口通讯首发消息时遇到的这类转换问题,做一下记录。
一、16进制的文本字符串如何转换数值
解决:形如QString("01")、QString("A0")等的字符串,希望转换为数值1和160保存在int中。bool ok = false;int value = QString("01").toInt(&ok, 16));// 或者QString("01").toInt(nullptr, 16))
二、数值如何转换为16进制的文本字符串
解决:数值160希望转换为16进制的文本字符串"A0"。int value = 160;QString text = QString::number(value, 16).toUpper();
三、16进制的文本字符串如何转换为QByteArray,使得每个字节存储一个16进制数
解决:QLineEdit中形如"01 A0 CB 0E"的文本字符串,希望存储在QByteArray中,并且每个字节存储一个16进制数。注意,QByteArray默认存储char类型数据,所以取值的时候需要qint8即unsigned char类型转换。其实理解起来很简单,就是把"01"这样的16进制字符串转换为数值,Qt中使用QString类的toInt()函数即可。若需要再将QByteArray中存储的内容取出来,只需要将每一个字节的内容用qint8强制转换就行了。QByteArray ba;QStringList dataList = ui->lineEdit->text().trimmed().split(" ", QString::SkipEmptyParts);int dataSize = dataList.size();for (int i = 0; i < dataSize; ++i){bool ok = false;ba.append((char)dataList.at(i).toInt(&ok, 16));// 这里必须用一个字节大小的char或unsigned char类型}