QByteArray::mid 详解
QByteArray::mid 用于从一个 QByteArray 中提取指定范围的子数组,而无需修改原始数据。
函数原型:
QByteArray QByteArray::mid(int pos, int len = -1) const;
参数解释
-
pos:- 起始位置(从0开始的索引)。
- 如果
pos超出范围(大于或等于数组长度),返回一个空的QByteArray。
-
len:- 子数组的长度。
- 默认值为
-1,表示从pos开始到数组末尾的所有字节。 - 如果
len超出实际数据长度,则提取到数组末尾为止。
返回值
- 返回一个新的
QByteArray,包含从pos开始、长度为len的字节。 - 不会修改原始数组的数据。
如何工作
mid 函数在底层不会复制原始数据,而是创建一个新的 QByteArray,并引用原始数据的相关部分。这样可以节省内存和提高性能。
性能分析
QByteArray::mid的开销非常小,因为它底层使用了 引用计数 和 浅拷贝。- 当修改子数组时,Qt 会执行深拷贝以确保数据安全(Copy-On-Write 机制)。
常见注意事项
- 索引检查:
pos超过范围时不会报错,但会返回空数组。
- 负值行为:
- 如果
len是负值(默认行为),mid会提取到末尾。 - 如果
pos是负值,则行为未定义(尽量避免)。
- 如果
总结
mid是提取子数组的最佳选择,安全、高效且代码简洁。- 适用于协议解析、数据分片等场景。
- 与
QByteArray的其他方法(如append、insert等)结合使用,可以灵活处理二进制数据。
来源:https://blog.csdn.net/qq_43689451/article/details/144497458

浙公网安备 33010602011771号