QByteArray::mid 详解

QByteArray::mid 用于从一个 QByteArray 中提取指定范围的子数组,而无需修改原始数据。

函数原型:

QByteArray QByteArray::mid(int pos, int len = -1) const;

参数解释

  1. pos:

    • 起始位置(从0开始的索引)。
    • 如果 pos 超出范围(大于或等于数组长度),返回一个空的 QByteArray
  2. len:

    • 子数组的长度。
    • 默认值为 -1,表示从 pos 开始到数组末尾的所有字节。
    • 如果 len 超出实际数据长度,则提取到数组末尾为止。

返回值

  • 返回一个新的 QByteArray,包含从 pos 开始、长度为 len 的字节。
  • 不会修改原始数组的数据。

如何工作

mid 函数在底层不会复制原始数据,而是创建一个新的 QByteArray,并引用原始数据的相关部分。这样可以节省内存和提高性能。

性能分析

  • QByteArray::mid 的开销非常小,因为它底层使用了 引用计数 和 浅拷贝。
  • 当修改子数组时,Qt 会执行深拷贝以确保数据安全(Copy-On-Write 机制)。

常见注意事项

  1. 索引检查:
    • pos 超过范围时不会报错,但会返回空数组。
  2. 负值行为:
    • 如果 len 是负值(默认行为),mid 会提取到末尾。
    • 如果 pos 是负值,则行为未定义(尽量避免)。

总结

  • mid 是提取子数组的最佳选择,安全、高效且代码简洁。
  • 适用于协议解析、数据分片等场景。
  • 与 QByteArray 的其他方法(如 appendinsert 等)结合使用,可以灵活处理二进制数据。

 

 

来源:https://blog.csdn.net/qq_43689451/article/details/144497458

 

posted @ 2025-07-14 16:18  joyfulest  阅读(109)  评论(0)    收藏  举报