@QByteArrayClass
Header: #include <<QByteArray
详细的函数和变量看官方help文档
关于此类的详细描述:
此类提供了一个字节的数组。
QByteArray可以储存所有的的字节,包括’\0’和常规的8字节的以’\0’为结尾的字符串,使用QByteArray比使用 const char *更方便,这种情况下,它能保证数据后面由一个’\0’,并且使用隐式共享(copy-on-write)来降低空间的使用且不需要复制数据。
除了QByteArray之外,Qt还提供了QString类来储存数据,在大多数情况下,我们比较喜欢用QString,QString在Qt的API中是始终使用的,两个主要访问QByteAttay的情况时,当你需要储存二进制的数据和当数据需要保密的时候(比如在嵌入式中使用Qt)。
一种初始化QByteAttay的方式是在构造函数中添加一个const char *,举个例子,后面的代码创造了一个5位的字节数组,包含了数据"Hello"。
QByteArray ba("Hello");
尽管数组的大小是5,但是这个字节数组仍然在数组的后面包含一个额外的’\0’特征,于是一个函数使用了指向源数据的指针(比如a call to data()),数据指针将会在’\0’的时候终值。
QByteArray在使用const char * data的时候会进行一次深度共享,因此你可以在修改它的时候不用考虑任何副作用(如果处于性能的原因不想使用深度共享,请使用QByteArray::fromRawData());
另一种设置数组尺寸的方法是使用resize()并且一个字节一个字节的初始化这个数组,QByteArray像C++一样使用0作为起始索引,可以使用[]来方位特定的索引,在非常量的组数中,操作符[]返回这个字节的参考,可以用在一个参考的左边,举个例子
QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;
对于只读的数组,可以使用at()这个语法
for (int i = 0; i < ba.size(); ++i) {
if (ba.at(i) >= 'a' && ba.at(i) <= 'f')
cout << "Found character in range [a-f]" << endl;
}
at()比操作符[]更快,因为它永远不会造成深度共享
为了在同一时间提取很多字节,使用 left(), right(), or mid().
一个QByteArray可以嵌入’\0’字节,size()函数尅返回整个数组的长度,包括嵌入的’\0’字节,但是在QByteArray的0的位置终结,举个例子:
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.
如果你想获得除第一个’\0’之外的数组的长度,可以使用qstrlen()在字节数组中。
在使用resize()以后,各个字节可以重新定义主句,如果想设置每一个字节为特殊额字节,请使用fill()函数。
为了获得当前的特征数据,使用data()或者constData()。这些函数返回一个指向起始字节的指针,这个指针在到达…
QByteAttay提供了如下基本的函数来修改字节数据: append(), prepend(), insert(), replace(), and remove(). For example:
QByteArray x("and");
x.prepend("rock "); // x == "rock and"
x.append(" roll"); // x == "rock and roll"
x.replace(5, 3, "&"); // x == "rock & roll"