QByteArray
- 该类是一个用于处理字符串的类似于 C++的 string 类型的类
- 该类保证字符串以'\0'结尾,并使用隐式共享(copy-on-write)来减少内存用量和不必要的数据复制。
- 适合用于存储纯二进制数据和内存资源比较短缺的情况下。
构造函数如下
- QByteArray(QByteArray &&other)
- QByteArray(const QByteArray &other)
- QByteArray(int size, char ch) //构造一个大小为size的字节数组,每个字节都设置为字符ch。
- QByteArray(const char *data, int size = -1)
- QByteArray()
其他常用函数
返回指向存储在字节数组中的数据的指针。 该指针可用于访问和修改组成数组的字节。 数据以'\ 0'终止,即,返回的字符串中的字节数是size()+ 1(对于'\ 0'终止符)。
QByteArray ba("Hello world");
char *data = ba.data();
while (*data) {
cout << "[" << *data << "]" << Qt::endl;
++data;
}
- QByteArray &QByteArray::remove(int pos, int len)
//从索引位置pos开始,从数组中删除len个字节,并返回对该数组的引用。如果pos超出范围,则什么也不会发生。 如果pos有效,但是pos + len大于数组的大小,则数组将在位置pos处被截断。
QByteArray ba("Montreal");
ba.remove(1, 4); // ba == "Meal"
- QByteArray QByteArray::mid(int pos, int len = -1) const
从位置pos开始,从该字节数组返回一个包含len个字节的字节数组。如果len为-1(默认值),或者pos + len> = size(),则返回一个字节数组,其中包含从位置pos到字节数组末尾的所有字节。
QByteArray x("Five pineapples");
QByteArray y = x.mid(5, 4); // y == "pine"
QByteArray z = x.mid(5); // z == "pineapples"
- QByteArray QByteArray::left(int len) const
返回一个字节数组,其中包含此字节数组的最左边的len个字节。如果len大于size(),则返回整个字节数组。
QByteArray x("Pineapple");
QByteArray y = x.left(4); // y == "Pine"
- QByteArray &QByteArray::replace(int pos, int len, const QByteArray &after)
将索引位置pos中的len个字节替换为之后的字节数组,并返回对此字节数组的引用。
QByteArray x("Say yes!");
QByteArray y("no");
x.replace(4, 3, y); // x == "Say no!"
- QByteArray QByteArray::repeated(int times) const
返回重复指定次数的此字节数组的副本。如果times小于1,则返回一个空字节数组。
QByteArray ba("ab");
ba.repeated(4); // returns "abababab"
- QByteArray QByteArray::number(int n, int base = 10)
返回一个字节数组,其中包含与基数(默认为10)相等的数字n的字符串。底数可以是2到36之间的任何值。
int n = 63;
QByteArray::number(n); // returns "63"
QByteArray::number(n, 16); // returns "3f"
QByteArray::number(n, 16).toUpper(); // returns "3F"
QByteArray QByteArray::number(double n, char f = 'g', int prec = 6)
//返回一个包含打印值n的字节数组,其格式为f,精度为prec。参数n按照指定的f格式进行格式化,默认情况下为g
e 格式为 [-]9.9e[+|-]999
E 格式为 [-]9.9E[+|-]999
f 格式为 [-]9.9
g use e or f format, 哪一个最简洁
G use E or f format, 哪一个最简洁
QByteArray ba = QByteArray::number(12.3456, 'E', 3); // ba == 1.235E+01
- int QByteArray::lastIndexOf(const QByteArray &ba, int from = -1) const
- int QByteArray::lastIndexOf(char ch, int from = -1) const
- int QByteArray::lastIndexOf(const char *str, int from = -1) const
返回字节在该字节数组中最后一次出现的索引位置,从索引位置from开始向后搜索。 如果from为-1(默认值),则搜索从最后一个字节开始。 如果找不到ba,则返回-1。
QByteArray x("crazy azimuths");
QByteArray y("az");
x.lastIndexOf(y); // returns 6
x.lastIndexOf(y, 6); // returns 6
x.lastIndexOf(y, 5); // returns 2
x.lastIndexOf(y, 1); // returns -1
QByteArray ba("ABCBA");
ba.lastIndexOf("B"); // returns 3
ba.lastIndexOf("B", 3); // returns 3
ba.lastIndexOf("B", 2); // returns 1
ba.lastIndexOf("X"); // returns -1
QByteArray().isEmpty(); // returns true
QByteArray("").isEmpty(); // returns true
QByteArray("abc").isEmpty(); // returns false
QByteArray().isNull(); // returns true
QByteArray("").isNull(); // returns false
QByteArray("abc").isNull(); // returns false
- int indexOf(const QByteArray &ba, int from = 0) const
- int indexOf(char ch, int from = 0) const
- int indexOf(const char *str, int from = 0) const
- int indexOf(const QString &str, int from = 0) const
返回字节数组ba在该字节数组中首次出现的索引位置,从索引位置from开始向前搜索。 如果找不到ba,则返回-1。
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
从字节数组的末尾删除n个字节。如果n大于size(),则结果为空字节数组。
QByteArray ba("STARTTLS\r\n");
ba.chop(2); // ba == "STARTTLS"
QByteArray ba1("ca\0r\0t");
ba1.size(); // Returns 2.
ba1.constData(); // Returns "ca" with terminating \0.
QByteArray ba2("ca\0r\0t", 3);
ba2.size(); // Returns 3.
ba2.constData(); // Returns "ca\0" with terminating \0.
QByteArray ba3("ca\0r\0t", 4);
ba3.size(); // Returns 4.
ba3.constData(); // Returns "ca\0r" with terminating \0.
const char cart[] = {'c', 'a', '\0', 'r', '\0', 't'};
QByteArray ba4(QByteArray::fromRawData(cart, 6));
ba4.size(); // Returns 6.
ba4.constData(); // Returns "ca\0r\0t" without terminating \0.
QByteArray x("and");
x.prepend("rock "); // x == "rock and"
x.append(" roll"); // x == "rock and roll"
x.replace(5, 3, "&"); // x == "rock & roll"