Qt框架之QByteArray类

一、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` 是共享的,或者在没有确保足够容量的情况下修改它,可能会导致未定义行为。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值