一、mid()成员函数
QByteArray是 Qt 框架中用于处理字节数组的类。mid() 是 QByteArray类的一个成员函数,用于字节数组中提取子数组。
mid()函数的原型如下:
QByteArray QByteArray::mid(int pos, length = -1) const
该函数接受两个参数:
- pos:起始位置,表示要提取子数组的起始索引(从0开始)。
- length:长度,表示要提取的子数组的长度。如果设置为-1(默认值),则提取从 pos`开始到末尾的所有字节。返回值为提取的子数组,类型为 QByteArray。
示例代码如下:
QByteArray byteArray = "Hello, World!";
QByteArray subArray = byteArray.mid(7, 5);
在上面的代码中,我们创建了一个包含字符串 "Hello, World!" 的 QByteArray`对象 byteArray。然后,使用 mid() 函数从 byteArray中提取从位置 7 开始的长度为 5 的子数组。最后,将提取的子数组保存到 subArray中。
结果将会是 subArray`包含字符串 "World" 。
mid()`函数在实际开发中常用于从字节数组中截取特定部分的数据,例如提取固定长度的数据或者提取特定标记之间的数据,也可用于偏移遍历下一段报文。
二、number()成员函数
`QByteArray::number()` 是一个用将数字转换为字节数组的静态函数。它有多个重载形式,可以支持不同类型的数字转换。
以下是一些 `QByteArray::number()` 函数的重载形式:
1. `QByteArray QByteArray::number(int n, int base = 10)`: 将整数n` 转换为以 `base` 进制表示的字节数组。默认情况下,base 为 10(十进制)。
2. `QByteArray QByteArray::number(uint n, int base = 10)`: 将无符号整数 `n` 转换为以 `base` 进制表示的字节数组。默认情况下,base 为 10(十进制)。
3. `QByteArray QByteArray::number(qlonglong n, int base = 10)`: 将长长整数 `n` 转换为以 `base` 进制表示的字节数组。默认情况下,base 为10(十进制)。
4. `QByteArray QByteArray::number(qulonglong n, int base = 10)`: 将无符号长长整数 `n` 转换为以 `base` 进制表示的字节数组。默认情况下,base 为 10(十进制)。
5. `Q QByteArray::number(float n, char format = 'g', int precision = 6)`: 将浮点数 `n` 转换为格式化的字节数组。 `format` 参数用于指定输出格式,可选值包括 'e'(科学计数法)和 'f'(定点表示法)。 `precision` 参数用指定精度。
6. `QByteArray QByteArray::number(double n, char format = 'g', int precision = 6)`: 将双精度浮点数 `n 转换为格式化的字节数组。 `format` 参数用于指定输出格式,可选值包括 'e'(科学计数法) 'f'(定点表示法)。 `precision` 参数用于指定精度。
以下是一个示例,展示如何使用 `QByteArray::number()` 函数将数字转换为字节数组:
#include <QByteArray>
#include <QDebug>
int main() {
int intValue = 123;
QByteArray intByteArray =::number(intValue);
qDebug() << "整数转换结果: " << intByteArray;
float floatValue = 3.14;
QByteArray floatByteArray = QByteArray::number(floatValue, 'f', 2);
qDebug() << "浮点数转换结果: " << floatByteArray;
return 0}
上述示例中,`QByteArray::number()` 函数分别将整数浮点数转换为字节数组,并使用 `qDebug()` 输出结果。
三、constData()成员函数
`constData` 是 `QByteArray` 类的一个成员函数,它返回一个指向字节数组中数据的常量指针(const char*)。这意味着通过这个指针,你可以读取数组中的数据,但不能修改它。
以下是 `constData` 函数的原型:
const char *constData() const;
这个函数的作用是:
- --返回一个指向字节数组中第一个字符的 `const char*` 指针。
- --返回的数据有效,直到 `QByteArray` 被修改或销毁。
- --由于返回的指针是 `const`,因此你不能通过这个指针修改 `QByteArray` 中的内容。
下面是一个如何使用 `constData` 的例子:
QByteArray byteArray = "这是一个例子字符串";
// 获取指向字节数组数据的常量指针
const char *data = byteArray.constData();
// 使用 'data' 来读取或传递数据,但无法修改它
qDebug() << data; // 输出: "这是一个例子字符串"
// 尝试通过 'data' 修改数据会导致编译错误,因为它是 const 的
// data[0] = 'X'; // 编译错误:不能给只读位置赋值
在需要将 `QByteArray` 的数据传递给只接受常量数据的函数时,`constData` 非常有用。例如,如果你需要将 `QByteArray` 中的数据传递给一个不需要修改数据的 C API 函数,就可以使用 `constData` 来获取数据的指针。
如果需要修改 `QByteArray` 的内容,你应该使用 `data()` 函数,它返回一个可以修改数据的 `char*` 指针。但是,使用 `data()` 修改数据时需要小心,因为如果 `QByteArray` 是共享的,或者在没有确保足够容量的情况下修改它,可能会导致未定义行为。