字节数组类QByteArray提供一个字节数组用于存储原始字节,号称 Best array!它比使用char *更方便,该类在串口通信中经常被使用,因为串口通信数据都是一个一个的8位字节流。

1、初始化

1.构造函数初始化方式;

QByteArray ba("Hello");

QByteArray array("Hello");if('o'==array[4]){qInfo()<<"array[4]='o'";}

虽然size()为5,但是字节数组在最后还会保留一个额外的’\ 0’字符, 以便如果使用一个函数来请求指向底层数据的指针(例如调用data()),那么指出的数据保证被’\ 0’终止。

以下代码,是无法编译通过的,因为索引是小于size的。加\0,不是说size就变6了。

QByteArray array("Hello");qInfo()<<"array.size="<<array.size();//5if('\0'==array[5]){qInfo()<<"array[5]='\0'";}
//无法编译通过,报错,索引不允许等于size!

2、逐个元素初始化

QByteArray ba;ba.resize(3);ba[0] = 0x3c;ba[1] = 0xb8;ba[2] = 0x64;

2、访问某个元素

主要四种方式:

 [ ] 和 data[ ] 为可读可写

at( ) 和 constData[ ]仅为可读 //如果只读采用这种方式避免了深度复制更快;

3、截取字符串

函数left()、right()或mid() ;

4、获取数组大小

函数size、length和count,完全等同;

5、数据转换与处理

1. Hex转换(十六进制转换)

这在调试特别有用,因为大多Hex码没有字符显示

QByteArray hex = data.toHex();qInfo() << "Hex" << hex;QByteArray from_hex = QByteArray::fromHex(hex);qInfo() << "From Hex" << from_hex;

2、数值转换

QByteArray number(int n, int base = 10)

其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,
即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。下列代码演示
了number ()函数的使用:

int n=63;qInfo()<<QByteArray::number(n);//63qInfo()<<QByteArray::number(n,2);//111111qInfo()<<QByteArray::number(n,8);//77qInfo()<<QByteArray::number(n,16);//3f

6、大小写转换及判断

函数toUpper()和toLower()

函数isUpper和isLower

7、字符串数值转为各类数值

toint() tofloat() todouble()等

8、QByteArray与char*互转

1、char*转QByteArray

char *ch;
QByteArray byte;
byte = QByteArray(ch); 

2、QByteArray转char*

char *b=a.data();

9、QByteArray与std::string互转

std::string toStdString();QByteArray::fromStdString(const std::string &str);

10、与字符串QString互转

QString str=QString("hello world!");QByteArray arr = str.toLatin1();
QByteArray arr("hello world!");QString str = arr;

11、QByteArray与自定义结构体之间的转化

#include <QByteArray>
#include <QDebug>
#include <stdlib.h>typedef struct Header{int channel;int type;}Headr;typedef struct Msg{Header header;char content[128];friend QDebug operator << (QDebug os, Msg msg){os << "(" << " channel:" << msg.header.channel << " type:" << msg.header.type<< " content:" << msg.content << " )";return os;}}Msg;typedef struct PeerMsg{PeerMsg(const int &ip, const int &por){ipV4 = ip;port = por;}int ipV4;int port;friend QDebug operator << (QDebug os, PeerMsg msg){os << "( " << " ipV4:" << QString::number(msg.ipV4)<< " port:" << QString::number(msg.port)<< " )";return os;}}PeerMsg;int main(void)
{Msg msg;msg.header.channel = 1001;msg.header.type = 1;strcpy(msg.content, "ABCDEFG");qDebug() << msg;QByteArray array;array.append((char*)&msg, sizeof(msg));Msg *getMsg = (Msg*)array.data();qDebug() << *getMsg;QByteArray totalByte;PeerMsg peerMsg(123456, 10086);totalByte.append((char*)&peerMsg, sizeof(PeerMsg));totalByte.append(array, array.size());PeerMsg *getByte = (PeerMsg*)totalByte.data();qDebug() << *getByte;QByteArray contentmsg = totalByte.right(totalByte.size() - sizeof(*getByte));Msg *getMsg2 = (Msg*)contentmsg.data();qDebug() << *getMsg2;return 0;
}

12、判断是否为空

bool isEmpty();

13、向前搜索和向后搜索

int indexOf(const QByteArray &ba, int from = 0);
QByteArray b("qwertyuitop");b.indexOf("t");b.indexOf("t",1);

14、插入

函数insert()可以在某个索引位置上插入:

QByteArray & insert(int i, const QByteArray &ba);

QByteArray ba("Meal");ba.insert(1, QByteArray("ontr"));// ba == "Montreal"

15、Hex和base64

QByteArray hex = data.toHex();qInfo() << "Hex" << hex;QByteArray from_hex = QByteArray::fromHex(hex);qInfo() << "From Hex" << from_hex;QByteArray base64 = data.toBase64();qInfo() << "base64" << base64;QByteArray from_base64 = QByteArray::fromBase64(base64);qInfo() << "From base64" << from_base64;

11-Qt6 QByteArray字节数组类相关推荐

  1. qt中QByteArray字节数组

    QByteArray bb("Hello"); //创建字节数组int n=bb.size(); //返回字节数组的大小//不包括终止符 QByteArray ba;//创建一个空 ...

  2. Qt QByteArray字节数组

    QByteArray bb("Hello"); //创建字节数组int n=bb.size(); //返回字节数组的大小//不包括终止符 \0QByteArray ba;//创建一 ...

  3. java中bitconverter_【Java】BitConverter(数字转字节数组工具类)

    import java.nio.ByteOrder; import java.nio.charset.Charset; /** * 数字转字节数组工具类 */ public class BitConv ...

  4. [C++11]_[初级]_[十六进制字符串转换为字节数组]

    场景 在开发使用加密算法md5,sha256等的功能时, 会生成基于十六进制的字符串密钥. 这时候在使用这些密钥进行解密或加密的时候,第三方库都需要传入一个字节数组usigned char*格式的数组 ...

  5. IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)

    一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...

  6. 【转】C#字节数组_字符串相互转换

    https://www.cnblogs.com/Asa-Zhu/archive/2012/11/08/2761137.html 如果还想从 System.String 类中找到方法进行字符串和字节数组 ...

  7. Qt4_字符串、字节数组和变量

    字符串 我们将从 QString开始.每一个图形用户界面(GUI) 程序都会用到字符串,不仅仅是为用户界面,更多的是为数据结构所用. C++ 本身提供两种宇符串:传统的 C语言型的,以" \ ...

  8. 如何在Java中将字节数组转换为十六进制字符串?

    我有一个用十六进制数字填充并打印的字节数组,简单的方法是毫无意义的,因为有许多不可打印的元素. 我需要的是以下形式的确切十六进制代码: 3a5f771c #1楼 最简单的解决方案,没有外部库,没有数字 ...

  9. 如何将字节数组转换为十六进制字符串,反之亦然?

    如何将字节数组转换为十六进制字符串,反之亦然? #1楼 在此不谈很多答案,但我发现十六进制字符串解析器的实现相当理想(比公认的要好约4.5倍),直接实现. 首先,我的测试输出(第一批是我的实现): G ...

最新文章

  1. 使用c++filt查看trafficserver堆栈调用信息
  2. spring-mvc注解
  3. 光盘压制:八种加密方法保护光盘数据安全
  4. SAP Spartacus 服务器端渲染文件 server.js 和构建后的 main.js 对比
  5. c语言基类型,C语言基本类型边界值
  6. 单继承模式下的JAVA和C++
  7. fdisk自动进行分区
  8. 攻击人脸识别,最高奖励10万 | 微众银行第二届金融科技高校技术大赛正式启动...
  9. Python 列表 reverse( )方法
  10. 20 岁 Google vs 18 岁百度,分道扬镳?| 畅言
  11. 华工材料力学能用计算机吗,华南理工大学材料力学考研经验分享与资料.pdf
  12. VC网络编程(Socket)项目化视频教程
  13. 学期计算机教学工作反思,小学信息技术老师一月工作反思总结教育教学笔记
  14. sql获取group by最后一条记录
  15. Colab 上使用shutil.copytree()复制整个文件夹到另一个文件夹
  16. Mac如何通过bootcamp(启动转换助理)安装Windows10系统?附教程和下载
  17. 谷歌工具条PR更新和排名变化的迷思
  18. 一阶零输入响应例题_一阶RC电路零输入响应的求解.PPT
  19. (已解决)jar!/BOOT-INF/classes!/application.yml (No such file or directory)
  20. 找参考图的同志们看过来,分享几个建模参考网站给你们。再不用愁啦

热门文章

  1. get这款工具,不会机器学习也能轻松搞定深度分析
  2. 10亿用户之后,为什么是百度率先打破花园围墙?
  3. 腾讯财报:业务换防,谁来扛起未来发展的大旗?
  4. 关于mysql的一些问题_关于mysql的一些细节问题
  5. key位置 win10生成的ssh_华为路由器配置SSH远程登录,就这么简单
  6. 计算机学校都有哪些怎么联系方式,计算机应用专业学校联系方式推荐
  7. ubuntu安装mysql远程_Ubuntu18.04下远程安装MySQL
  8. 安卓 无权限 访问_U盘提示无权限访问怎么办 电脑U盘访问权限管理
  9. python方格染色_判定二部图的着色算法(Python),题,染色法,判断,二分
  10. 三十二楼层选几层最好_楼房哪些楼层不能选, 买房楼层选不好开始大忌