来了,老弟,不收藏你就后悔吧 !****点赞收藏⭐️留言 不迷路~~~
文章目录「作者主页 」:鱼酱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()<2.使用函数初始化“hello” “68656c6c6f”
“hello” “68656c6c6f”
“aaa” “616161”
“cax00rx00t” “636100720074”
“02020202”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()< 5.判空“012” “303132”
如果字节数组的大小为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 false6.访问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数组->QByteArrayvoid demo11() { //浅拷贝初始化 const char cart[] = {'c', 'a', '', 'r', '', 't'}; QByteArray ba1(QByteArray::fromRawData(cart, 6)); //深拷贝 QByteArray ba2(cart,6); }12.16进制字符串转QByteArraychar 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; i13.QByteArray转字符串 void demo13() { QByteArray arr("hello"); QString str= arr; }14.遍历与查找void demo14() { char p[] = {static_cast16.格式化(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" } 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 #includevoid demo17() { QByteArray arr; arr.resize(8); qint64 i = 1; memcpy(arr.data(),&i,8); qDebug()<(6),arr2.data()); qDebug()< 输出
"0100000000000000" "0000000000000001" "06000000"欢迎分享,转载请注明来源:内存溢出
评论列表(0条)