文章目录提示:至目前版本 QT 中,QByteArray 支持的基础数据类型多为 char
- 前言
- 一、将16进数(HEX)转换为 Char,生成新的 QByteArray
- 1. 采用构造函数生成
- 2. 采用系统提供静态函数生成
- 二、将字符串转化为 QByteArray
- 1. 采用系统提供的静态函数生成
- 三、其它类型不能直接生成 QByteArray
- 1. 其它类型变量可以靠赋值转换
- 2. 直接赋值转换
- 总结
前言
QT 对于文件、设备、通讯端口之类的数据交换,采用 QByteArray 类进行,所以在嵌入式开发中经常操作该类以获取或设置数据,本文总结该类的使用。
一、将16进数(HEX)转换为 Char,生成新的 QByteArray
1. 采用构造函数生成提示:单个字符的标识为:char ch = ‘xab’;
注意:‘xff’ 在QT内为16进制原数的合法表述,但其数值对 char 类型来说已经超范围了
static const char ch0 = 'xab';
QByteArray byteAry0(&ch0);
qDebug() << "byte array 0 is:" << byteAry0; // ret 0xAB
static const char ch1[] = {'xff', 'x33', 'x56', 'xab'};
QByteArray byteAry1(ch1);
qDebug() << "byte array 1 is:" << byteAry1; // ret 0xff...
2. 采用系统提供静态函数生成
static const char ch2[] = {
'x00', 'x00', 'x03', 'x84', 'x78', 'x9c', 'x3b', 'x76',
'xec', 'x18', 'xc3', 'x31', 'x0a', 'xf1', 'xcc', 'x99',
'x6d', 'x5b'
};
QByteArray byteAry2 = QByteArray::fromRawData(ch2, sizeof(ch2));
qDebug() << "byte array 2 is:" << byteAry2; // ret 0x00 00 03 84..
二、将字符串转化为 QByteArray 1. 采用系统提供的静态函数生成将基础数据转化为 QByteArray 后,在后续QT的处理中,很少再需要转换回字符串数组进行运算,有时会转换为 qint32 等数值型进行运算。
QByteArray byteAry3 = QByteArray::fromHex("abccddff");
qDebug() << "byte array 3 is:" << byteAry3; // ret 0xAB CC DD..
三、其它类型不能直接生成 QByteArray
1. 其它类型变量可以靠赋值转换
uint8_t num4 = 0xff; static const char ch4 = ~num4 + 1; QByteArray byteAry4(&ch4); qDebug() << "byte array 4 is:" << byteAry4; // ret 0x01 uint16_t num5 = 16; static const char ch5 = num5; QByteArray byteAry5(&ch5); qDebug() << "byte array 5 is:" << byteAry5; // ret 0x10
2. 直接赋值转换赋值所带来的隐形强制类型转换将被体现出来
static const char ch6 = 250; QByteArray byteAry6(&ch6); qDebug() << "byte array 6 is:" << byteAry6; // ret 0xFA
总结数值将能够超过 char 类型本身所代表的 -127 to 128 限制,直接以16进制原始状态写入内存
后续进一步总结。



