????????从串口读取到的QByteAray数据一般需要进行提取和解析,此时就需要将QByteArray数拒转换为各种类型的数据。常用的转换包括:
(1) 转为Hex,用于显示十六进制,这点在调试时特别有用,因为大多HEX码是没有字符显示的,如Ox00、 Ox20等。
(2)转为不同进制数值并显示,如二进制、八进制、十进制和十六进制等数值。
(3)转为整数类型、浮点类型等的数据类型。
?? (4)字母大小写进行转换。
(5)转为字符串类型。
1. Hex转换(十六进制转换)QByteArray类的公有静态函数QByteArray::fromHex可以把十六进制编码的数据转换为字符(char)类型的数据,并存储到QByteArray类对象中。该函数的原型声明如下:
QByteArray fromHex(const QByteArray &hexEncoded);
其中,参数hexEncoded是十六进制编码的字节数组。由于该函数并不检查参数的有效性,因此遇到非十六进制数据则直接略过,然后继续处理剩余的数据。
下列代码演示了fromHex()函数的使用:
QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data ();// returns "Qt is great!"
字符'5'和'1'为一组,转为十六进制数据0x51,0x51对应的十进制数据是81,ASCI码为81的字符是Q.与fromHex()相逆的函数是toHex(),该函数将字节数组中十六进制的数值编码转化为字符,它的原型声明如下:
QByteArray toHex()下列代码演示了toHex函数的使用:
QByteArray toHex()QByteArray ba;
ba.resize (3);
ba [0] = 0x30;
ba [1] = 0x31;
ba [2] = 0x32;
qDebug () << ba.toHex(); //return "303132
索引为0的字节数据为0x30,直接转为两个字符'3'和'0'。