
来了,老弟,不收藏你就后悔吧 !****点赞收藏⭐️留言 不迷路~~~
文章目录「作者主页 」:鱼酱2333
「 B站首页 」:鱼酱2333
「本文录入专栏」:Qt入门系列开发教程
「本文内容」:Qt中QByteArray 常用 *** 作
0.应用场景1.QByteArray
简介增删查改 2. *** 作例子
1.构造函数初始化2.使用函数初始化3.深拷贝与浅拷贝4.赋值5.判空6.访问7.添加(头部添加、插入、尾巴添加)8.查找、替换、截取9.删除10.QByteArray -> char数组11.char数组->QByteArray12.16进制字符串转QByteArray13.QByteArray转字符串14.遍历与查找15.数字转QByteArray16.格式化17.大小端转换技巧
0.应用场景1.QByteArray 简介二进制或者、16进制数据的存储、char数组的存储。
QByteArray 可用于存储原始字节(包括 '’s)和传统的 8 位以 ‘’ 结尾的字符串。使用 QByteArray 比使用 const char * 方便得多。在幕后,它始终确保数据后跟一个 ‘’ 终止符,并使用隐式共享(copy-on-write)来减少内存使用并避免不必要的数据复制。
除了 QByteArray,Qt 还提供了 QString 类来存储字符串数据。对于大多数用途,QString 是您要使用的类。它存储 16 位 Unicode 字符,从而可以轻松地在您的应用程序中存储非 ASCII/非拉丁 1 字符。此外,QString 在 Qt API 中贯穿始终。 QByteArray 适用的两种主要情况是当您需要存储原始二进制数据时,以及当内存保护至关重要时(例如,对于嵌入式 Linux 的 Qt)。
初始化 QByteArray 的一种方法是简单地将 const char * 传递给其构造函数。例如,以下代码创建一个大小为 5 的字节数组,其中包含数据“Hello”:
QByteArray ba("Hello");
增对于QByteArray *** 作可以分为:增、删、查、改
//将字节数组 附加到此字节数组的末尾。 QByteArray &append(const QByteArray &ba) //在索引位置 i 处插入数据并返回对此字节数组的引用。 QByteArray &insert(qsizetype i, QByteArrayView data) //浅拷贝数据 QByteArray fromRawData(const char *data, qsizetype size) //将字节数组 ba 附加到此字节数组并返回对此字节数组的引用。 QByteArray &QByteArray::prepend(QByteArrayView ba) //返回一个字节数组,将整数 n 表示为文本。 QByteArray number(int n, int base = 10) QByteArray number(uint n, int base = 10) QByteArray number(long n, int base = 10) QByteArray number(ulong n, int base = 10) QByteArray number(qlonglong n, int base = 10) QByteArray number(qulonglong n, int base = 10) QByteArray number(double n, char format = 'g', int precision = 6)删
//清空 void clear() //从数组中删除 len 个字节,从索引位置 pos 开始,并返回对数组的引用。 QByteArray &remove(int index, int len);查
//正序查找 int indexOf(char c, int from = 0) const; int indexOf(const char *c, int from = 0) const; int indexOf(const QByteArray &a, int from = 0) const; //倒叙查找 int lastIndexOf(char c, int from = -1) const; int lastIndexOf(const char *c, int from = -1) const; int lastIndexOf(const QByteArray &a, int from = -1) const; //以XX开头 bool startsWith(const QByteArray &a) const; //是否包含字符 bool contains(char c) const; //统计字符 int count(char c) const;改
//替换 QByteArray &replace(int index, int len, const char *s); //分割 QList2. *** 作例子 1.构造函数初始化split(char sep) const; //返回一个字节数组,其中包含此字节数组最左边的 len 个字节。 QByteArray left(int len) const; //返回一个字节数组,其中包含此字节数组最右边的 len 个字节。 QByteArray right(int len) const; //从位置 pos 返回一个包含来自该字节数组的 len 个字节的字节数组。 QByteArray mid(int index, int len = -1) const; //从字节数组的末尾删除 n 个字节。 void QByteArray::chop(int n) //返回一个字节数组,其中包含该字节数组最左边的 size() - len 个字节。 QByteArray chopped(int len) const
//1.初始化
void demo1()
{
//构造函数初始化
QByteArray arr1("hello");
QByteArray arr2(arr1);
QByteArray arr3(3,'a');
//深拷贝初始化
const char cart[] = {'c', 'a', '', 'r', '', 't'};
QByteArray arr4(cart,6);
QByteArray arr5={0x04,0x02};
qDebug()<
“hello” “68656c6c6f”
“hello” “68656c6c6f”
“aaa” “616161”
“cax00rx00t” “636100720074”
“02020202”
2.使用函数初始化
void demo2()
{
QByteArray ba("Istambul");
ba.fill('o');
// ba == "oooooooo"
ba.fill('X', 2);
// ba == "XX"
}
3.深拷贝与浅拷贝
void demo2()
{
//浅拷贝初始化
const char cart[] = {'c', 'a', '', 'r', '', 't'};
QByteArray ba1(QByteArray::fromRawData(cart, 6));
//深拷贝
QByteArray ba2(cart,6);
}
4.赋值
//4赋值
void demo4()
{
//使用等号赋值
QByteArray arr;
arr.resize(3);
arr[0]=static_cast(0x30);
arr[1]=static_cast(0x31);
arr[2]=static_cast(0x32);
qDebug()<
“012” “303132”
5.判空
如果字节数组的大小为0,则返回true;否则返回false。
QByteArray().isEmpty(); // returns true
QByteArray("").isEmpty(); // returns true
QByteArray("abc").isEmpty(); // returns false
如果此字节数组为空,则返回true;否则返回false。
QByteArray().isNull(); // returns true
QByteArray("").isNull(); // returns false
QByteArray("abc").isNull(); // returns false
6.访问
void demo6()
{
QByteArray arr("hello");
//[]访问
qDebug()<< arr[0];
//使用at访问
qDebug()<< arr.at(0);
}
7.添加(头部添加、插入、尾巴添加)
void demo7()
{
qDebug()<<"---------";
{
QByteArray arr(2,'a');
QByteArray arrtemp(2,'d');
qDebug()<(0x30));
qDebug()<(0x30));
qDebug()<(0x30));
qDebug()<
输出
---------
"6161"
"306161"
"6464306161"
---------
"6161"
"616130"
"6161306464"
---------
"6161"
"613061"
"6130616464"
8.查找、替换、截取
void demo8()
{
//查找
{
QByteArray arr("helloworld");
//从前往后
qDebug()<
9.删除
void demo9()
{
{
QByteArray x("apple");
x.remove(1,2);//ale
}
{
QByteArray x("apple");
x.clear();// 空的
}
{
QByteArray x("apple");//pple
x.erase(x.begin(),x.begin()+1);
QByteArray y("apple");//e
y.erase(y.begin(),y.end()-1);
}
}
10.QByteArray -> char数组
void demo10()
{
QByteArray arr(6,'a');
char*p = arr.data();
//浅拷贝
char *pArr = new char[6];
pArr = arr.data();
//深拷贝
char *pArr2 = new char[6];
memcpy(pArr2,arr.data(),6);
}
11.char数组->QByteArray
void demo11()
{
//浅拷贝初始化
const char cart[] = {'c', 'a', '', 'r', '', 't'};
QByteArray ba1(QByteArray::fromRawData(cart, 6));
//深拷贝
QByteArray ba2(cart,6);
}
12.16进制字符串转QByteArray
char char2hex(char v)
{
if(v >= '0' && v <= '9')
{
v -= '0';
}
else if(v >= 'a' && v <= 'f')
{
v = v - 'a' + 10;
}
else if( (v >= 'A' && v <= 'F'))
{
v = v - 'A' + 10;
}
return v;
}
QByteArray hexStringtobytearray(QString strHex)
{
bool isAddZero = (strHex.size()%2) > 0;
if(isAddZero)
{
strHex.insert(0,QString("0"));
}
QByteArray ret;
char hcode, lcode, val;
for(quint16 i=0; i
13.QByteArray转字符串
void demo13()
{
QByteArray arr("hello");
QString str= arr;
}
14.遍历与查找
void demo14()
{
char p[] = {static_cast(0xFF),static_cast(0xFF),static_cast(0xFF)};
QByteArray arr(p,sizeof(p));
for(auto it:arr)
{
qDebug()<void demo15()
{
QByteArray ba;
int n = 63;
ba.setNum(n); // ba == "63"
ba.setNum(n, 16); // ba == "3f"
}
16.格式化
void demo16()
{
//删除转义字符
QByteArray ba(" lotst ofnwhitespacern ");
ba = ba.trimmed();
// ba == "lotst ofnwhitespace";
QByteArray x("Qt by THE QT COMPANY");
QByteArray y = x.toUpper();
// y == "QT BY THE QT COMPANY"
}
17.大小端转换技巧
//包含下面的头文件,该头文件包含所有的大小端转换方法,but 只有高版本Qt有
//低版本建议使用memcpy
#include
void demo17()
{
QByteArray arr;
arr.resize(8);
qint64 i = 1;
memcpy(arr.data(),&i,8);
qDebug()<(6),arr2.data());
qDebug()<
输出
"0100000000000000"
"0000000000000001"
"06000000"
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)