QByteArray使用详解
QByteArray
是 Qt 提供的一个字节数组类,用于处理二进制数据。它可以存储原始字节,并提供了一系列方法来操作和转换这些字节数据。 QByteArray
在处理文本和二进制文件、网络数据传输等场景中非常有用。
一、QByteArray创建和初始化
1.1 创建空的 QByteArray
QByteArray byteArray;
1.2 使用初始数据创建 QByteArray
QByteArray byteArray("Hello, World!");
QByteArray byteArrayWithSize(10, 'a'); // 创建一个大小为 10 的字节数组,所有字节初始化为 'a'
二、QByteArray基本操作
2.1 QByteArray获取字节数组的大小 (size
)
int size = byteArray.size();
2.2 QByteArray检查是否为空 (isEmpty
)
bool empty = byteArray.isEmpty();
2.3 QByteArray访问和修改数据
使用索引访问和修改数据:
char ch = byteArray[0]; // 访问第一个字节
byteArray[0] = 'H'; // 修改第一个字节
2.4 QByteArray添加数据
在数组末尾添加数据:
byteArray.append('!');
byteArray.append(" More text.");
2.5 QByteArray插入数据
在指定位置插入数据:
byteArray.insert(5, ", inserted text");
2.6 QByteArray删除数据
删除指定位置的字节:
byteArray.remove(5, 9); // 从索引 5 开始删除 9 个字节
2.7 QByteArray清空数据
byteArray.clear();
三、转换和编码
3.1 QByteArray转换为QString字符串
将 QByteArray
转换为 QString
,可以指定编码:
QString str = QString::fromUtf8(byteArray);
3.2 QString指定编码UTF8转为QByteArray
将 QString
转换为 QByteArray
,可以指定编码utf8:
QByteArray byteArray = str.toUtf8();
将 QString
转换为 QByteArray
,可以指定编码Latin1:
QByteArray byteArray = str.toLatin1();
3.3 QByteArray大小写转换
- 转为大写
QByteArray test;
QByteArray byteArray = test.toUpper();
- 转为小写
QByteArray test;
QByteArray byteArray = test.toLower()
3.4 Base64 编码和解码
将 QByteArray
编码为 Base64:
QByteArray base64Encoded = byteArray.toBase64();
将 Base64 编码的 QByteArray
解码:
QByteArray decoded = QByteArray::fromBase64(base64Encoded);
3.5 QByteArray十六进制编码和解码
将 QByteArray
编码为十六进制:
QByteArray hexEncoded = byteArray.toHex();
将十六进制编码的 QByteArray
解码:
QByteArray decoded = QByteArray::fromHex(hexEncoded);
四、其他常用操作
4.1 比较 QByteArray
比较两个 QByteArray
:
QByteArray byteArray1("Hello");
QByteArray byteArray2("World");
bool isEqual = (byteArray1 == byteArray2); // false
4.2 查找子串
在 QByteArray
中查找子串的位置:
int index = byteArray.indexOf("World"); // 返回子串 "World" 的起始位置
4.3 替换子串
在 QByteArray
中替换子串:
byteArray.replace("World", "Qt");
- 示例代码
下面是一个完整的示例,演示了 QByteArray
的基本用法:
#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 创建并初始化 QByteArray
QByteArray byteArray("Hello, World!");
// 获取大小和检查是否为空
qDebug() << "Size:" << byteArray.size();
qDebug() << "Is empty:" << byteArray.isEmpty();
// 访问和修改数据
byteArray[0] = 'h';
qDebug() << "Modified byteArray:" << byteArray;
// 添加和插入数据
byteArray.append(" More text.");
byteArray.insert(5, ", inserted text");
qDebug() << "After append and insert:" << byteArray;
// 删除数据
byteArray.remove(5, 9);
qDebug() << "After remove:" << byteArray;
// 转换和编码
QString str = QString::fromUtf8(byteArray);
qDebug() << "Converted to QString:" << str;
QByteArray base64Encoded = byteArray.toBase64();
qDebug() << "Base64 encoded:" << base64Encoded;
QByteArray decoded = QByteArray::fromBase64(base64Encoded);
qDebug() << "Base64 decoded:" << decoded;
QByteArray hexEncoded = byteArray.toHex();
qDebug() << "Hex encoded:" << hexEncoded;
decoded = QByteArray::fromHex(hexEncoded);
qDebug() << "Hex decoded:" << decoded;
// 比较 QByteArray
QByteArray byteArray1("Hello");
QByteArray byteArray2("World");
bool isEqual = (byteArray1 == byteArray2);
qDebug() << "Are byteArrays equal:" << isEqual;
// 查找和替换子串
int index = byteArray.indexOf("Qt");
qDebug() << "Index of 'Qt':" << index;
byteArray.replace("Qt", "C++");
qDebug() << "After replace:" << byteArray;
return a.exec();
}
总结
QByteArray
是一个非常强大的工具,用于处理二进制数据和字符串转换。它在网络编程、文件处理、编码和解码等场景中都有广泛的应用。通过掌握 QByteArray
的基本操作和常用功能,您可以更高效地处理 Qt 中的字节数据。
其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)