QByteArray详解
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"