首页 > 技术文章 > QByteArray详解

Mike2019 2020-12-24 11:50 原文

1、概述

2、初始化

2.1 QByteArray()

QByteArray array1;
array1.resize(4);
array1[0] = 1;
array1[1] = 2;
array1[2] = 'm';
array1[3] = 'k';
qDebug() << array1;  //结果: "\x01\x02mk"

2.2 QByteArray(const char *data, int size = -1)

  size指定数据长度,默认为-1,那么QByteArray在构造的时候遇到第一个 '\0' 空字符时停止。所以如果你要赋值的数据中确实有 '\0' 的话,需要指定size。

QByteArray array2("hello\0world");
qDebug() << array2;  //结果: "hello"

QByteArray array2("hello\0world", 11);
qDebug() << array2;  //结果: "hello\x00world"

QByteArray array3;
array3 = "hello world";
qDebug() << array3;    //结果: "hello world"

2.3 QByteArray(int size, char ch)

QByteArray array4(5, 'Q');
qDebug() << array4;    //结果: "QQQQQ"

 3、访问

  QByteArray的访问方式有四种:[]、data[]和at()、constData[]。其中[]和data[]为可读可写;at()和constData[]为只读,因此访问用这两种速度较快。

4、成员函数

4.1 char *QByteArray::data()

  返回指向字节数组中存储的数据的指针。

QByteArray array2("hello world");
char *data = array2.data();
qDebug() << array2.data()[0] << array2.data()[1] << array2.data(); //结果:h e hello world
qDebug() << data[0] << data[1] << data;  //结果:h e hello world

 

 4.2 QByteArray &QByteArray::fill(char ch, int size = -1)

  将字节数组的每个字节用ch填充,如果size不是默认值-1,则先将字节数组调整为指定size大小,再填充。

QByteArray array2("hello world");
qDebug() << array2;  //结果:"hello world"
array2.fill('m');
qDebug() << array2;  //结果:"mmmmmmmmmmm"
array2.fill('m', 5);
qDebug() << array2;  //结果:"mmmmm"

 4.3 int QByteArray::indexOf(const QByteArray &ba, int from = 0) const

  搜索并返回字节数组中第一次出现指定字节数组ba的索引位置,位置从索引from开始向后搜索。

QByteArray x("sticky question");
QByteArray y("sti");
x.indexOf(y);               // returns 0
x.indexOf(y, 1);            // returns 10
x.indexOf(y, 10);           // returns 10
x.indexOf(y, 11);           // 搜不到 returns -1

4.4 QByteArray QByteArray::left(int len) const

  从最左侧第一个字节开始向右截取len个字节。

QByteArray x("Pineapple");
QByteArray y = x.left(4); // y == "Pine"

附件:所有函数

https://zhuanlan.zhihu.com/p/51728642

推荐阅读