Qt中的QByteArray类

1 QByteArray类概述

  • QByteArray类指字节数组,用QByteArray比const char *这种类型要便利的多。
  • QByteArray类可用来存储包括’\0’的字节数组,或是传统的8bit以’\0’结尾的字符串,它使用了隐式共享的技术。
  • 使用QByteArray类我们能够很方便的对数据包进行操作,可以先把数据包转换成QByteArray类型,对QByteArray可以较为方便地在后面或前面加入新数据,形成的新QByteArray可以很方便地通过网口发送。Qt中TCP或UDP发送和接收数据都是使用的QByteArray。

2 QByteArray类接口函数

2.1. 初始化QByteArray

QByteArray::QByteArray(const char *data, int size = -1);//从data开始的size字节构建QByteArray

2.2. QByteArray的操作

//在前面或后面添加
QByteArray &QByteArray::append(const QByteArray &ba);
QByteArray &QByteArray::append(const char *str);
QByteArray &QByteArray::prepend(const QByteArray &ba);
QByteArray &QByteArray::prepend(const char *str);

char* QByteArray::data();//返回一个指向QByteArray第一个单元的指针
int QByteArray::size() const;//返回QByteArray的字节个数
void QByteArray::resize(int size);//设置QByteArray的大小,如果size比现在大,则多余部分未初始化,如果小,则从尾部截去

2.3 QByteArray的编码转换

//与不同进制之间
//hex
[static] QByteArray QByteArray::fromHex(const QByteArray &hexEncoded);//从16进制编码转换
QByteArray QByteArray::toHex() const;//转换为16进制编码
QByteArray text = QByteArray::fromHex("517420697320677265617421");
qDebug() << text.data();            // returns "Qt is great!"






  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: qbytearray.mid是QtQByteArray的一个成员函数,用于从QByteArray提取一部分字节数据,即从间位置开始截取一定长度的字节数据。 具体用法为: QByteArray byteArray = "Hello World"; QByteArray subArray = byteArray.mid(6, 5); //从第6个字节开始截取5个字节 qDebug() << subArray; //输出 "World" 其,mid函数的第一个参数表示截取的起始位置,第二个参数表示截取的长度。如果第二个参数未指定,则默认截取从起始位置到末尾的所有字节数据。 ### 回答2: Qt 的 QByteArray 是用于处理二进制数据的。在 QByteArray ,mid() 函数是用于查找 QByteArray 的某一个子段,并返回该子段的指针和长度。举个例子,如果要从一个长度为 10 的 QByteArray 提取第 4 个元素开始的连续 3 个元素,可以使用 mid() 函数来实现。调用方式如下: ```c++ QByteArray bytes("abcdefghijklmn"); const QByteArray subbytes = bytes.mid(3, 3); ``` 上述代码,bytes 是一个长度为 14 的 QByteArray 对象,subbytes 是 bytes 长度为 3 且以第 4 个元素为起始位置的子段。第一个参数是子串的起始位置,而第二个参数表示子串的长度。 需要注意的是,mid() 函数返回的是 QByteArray 类型的对象,因为 QByteArray 支持隐式共享机制。如果想要在 QByteArray 周围传递大量的二进制数据, mid() 函数可以返回 QByteArray 的子对象,而不是新的 QByteArray 对象。 ```c++ const QByteArray subbytes = bytes.mid(3, 3).prepend("XYZ"); ``` 上述代码,prepend() 函数是 QByteArray 用于在 QByteArray 前面添加数据的函数。它将把 XYZ 添加到子段的前面,而不是添加到原始 QByteArray 的前面。根据隐式共享机制,由于 subbytes 是从原始字节数组的共享数据段提取的,因此在处理之前可以改变它,而不会影响原始字节数组。 ### 回答3: QByteArray.mid方法是Qt一个强大而且非常有用的方法,可以用来获取一个QByteArray对象的子对象,即从该对象的起始位置(0)开始截取一段连续的字节列表(子对象)。 该方法有两个重载形式。第一个是QByteArray.mid(int position, int length),它接受两个整数参数,分别代表子对象的起始位置和长度。 例如,如果有一个QByteArray对象“ba”,它包含了以下字节: [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a] 如果我们要获取从“ba”的第3个字节开始(即0x63)的后5个字节(即[0x63, 0x64, 0x65, 0x66, 0x67]),我们可以使用以下代码: QByteArray ba = QByteArray::fromHex("6162636465666768696a"); QByteArray sub = ba.mid(2, 5); qDebug() << sub.toHex(); 输出结果将会是: "6364656667" 第二个重载形式是QByteArray.mid(int position),它接受一个整数参数,表示子对象的起始位置。该方法会返回一个包含从起始位置到QByteArray对象末尾的所有字节的QByteArray对象。 例如,如果有一个QByteArray对象“ba”,它包含了以下字节: [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a] 我们可以使用以下代码获取从“ba”的第3个字节开始到末尾的所有字节(即[0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a]): QByteArray ba = QByteArray::fromHex("6162636465666768696a"); QByteArray sub = ba.mid(2); qDebug() << sub.toHex(); 输出结果将会是: "636465666768696a" 总之,QByteArray.mid方法是一个非常方便且易于使用的方法,可以在Qt处理二进制数据时发挥重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值