QByteArray 类

QByteArray 类提供字节数组。 更多信息...

头文件 #include <QByteArray>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

注意: 此类中的所有函数都是 可重入的

公共类型

classFromBase64Result
enumBase64Option { Base64Encoding, Base64UrlEncoding, KeepTrailingEquals, OmitTrailingEquals, IgnoreBase64DecodingErrors, AbortOnBase64DecodingErrors }
flagsBase64Options
const_iterator
const_reverse_iterator
iterator
reverse_iterator

公共函数

QByteArray()
QByteArray(const char *data, qsizetype size = -1)
QByteArray(qsizetype size, char ch)
QByteArray(qsizetype size, Qt::Initialization)
QByteArray(const QByteArray &other)
QByteArray(QByteArray &&other)
~QByteArray()
QByteArray &append(const QByteArray &ba)
QByteArray &append(char ch)
QByteArray &append(qsizetype count, char ch)
QByteArray &append(const char *str)
QByteArray &append(const char *str, qsizetype len)
QByteArray &append(QByteArrayView data)
(since 6.6) QByteArray &assign(QByteArrayView v)
(since 6.6) QByteArray &assign(qsizetype n, char c)
(since 6.6) QByteArray &assign(InputIterator first, InputIterator last)
charat(qsizetype i) const
charback() const
char &back()
QByteArray::iteratorbegin()
QByteArray::const_iteratorbegin() const
qsizetypecapacity() const
QByteArray::const_iteratorcbegin() const
QByteArray::const_iteratorcend() const
voidchop(qsizetype n)
QByteArraychopped(qsizetype len) const &
QByteArraychopped(qsizetype len) &&
void清楚()
(自6.0起) intcompare(QByteArrayView bv, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
QByteArray::const_iteratorconstBegin() const
const char *constData() const
QByteArray::const_iteratorconstEnd() const
(自6.0起) boolcontains(QByteArrayView bv) const
boolcontains(char ch) const
(自6.0起) qsizetypecount(QByteArrayView bv) const
qsizetypecount(char ch) const
QByteArray::const_reverse_iteratorcrbegin() const
QByteArray::const_reverse_iteratorcrend() const
char *data()
const char *data() const
QByteArray::iteratorend()
QByteArray::const_iteratorend() const
(自6.0起) boolendsWith(QByteArrayView bv) const
boolendsWith(char ch) const
(自6.1起) QByteArray::iteratorerase(QByteArray::const_iterator first, QByteArray::const_iterator last)
(自6.5起) QByteArray::iteratorerase(QByteArray::const_iterator it)
QByteArray &fill(char ch, qsizetype size = -1)
(自6.0起) QByteArrayfirst(qsizetype n) const &
(自6.0起) QByteArrayfirst(qsizetype n) &&
charfront() const
char &front()
(自6.0起) qsizetypeindexOf(QByteArrayView bv, qsizetype from = 0) const
qsizetypeindexOf(char ch, qsizetype from = 0) const
(自6.0起) QByteArray &insert(qsizetype i, QByteArrayView data)
QByteArray &insert(qsizetype i, const char *s)
QByteArray &insert(qsizetype i, const QByteArray &data)
QByteArray &insert(qsizetype i, qsizetype count, char ch)
QByteArray &insert(qsizetype i, char ch)
QByteArray &insert(qsizetype i, const char *data, qsizetype len)
boolisEmpty() const
boolisLower() const
boolisNull() const
boolisUpper() const
(自6.3起) boolisValidUtf8() const
(自6.0起) QByteArraylast(qsizetype n) const &
(自6.0起) QByteArraylast(qsizetype n) &&
(自6.0起) qsizetypelastIndexOf(QByteArrayView bv, qsizetype from) const
qsizetypelastIndexOf(char ch, qsizetype from = -1) const
(自6.2起) qsizetypelastIndexOf(QByteArrayView bv) const
QByteArrayleft(qsizetype len) const &
QByteArrayleft(qsizetype len) &&
QByteArrayleftJustified(qsizetype 宽度, char 填充字符 = ' ', bool 截断 = false) const
qsizetypelength() const
QByteArraymid(qsizetype 位置, qsizetype 长度 = -1) const &
QByteArraymid(qsizetype 位置, qsizetype 长度 = -1) &&
(since 6.4) QByteArraypercentDecoded(char 百分号 = '%') const
QByteArray &prepend(QByteArrayView ba)
QByteArray &prepend(char 字符)
QByteArray &prepend(qsizetype 数量, char 字符)
QByteArray &prepend(const char *字符串)
QByteArray &prepend(const char *字符串, qsizetype 长度)
QByteArray &prepend(const QByteArray &ba)
voidpush_back(const QByteArray &其他)
voidpush_back(char 字符)
voidpush_back(const char *字符串)
(since 6.0) voidpush_back(QByteArrayView 字符串)
voidpush_front(const QByteArray &其他)
voidpush_front(char 字符)
voidpush_front(const char *字符串)
(since 6.0) voidpush_front(QByteArrayView 字符串)
QByteArray::reverse_iteratorrbegin()
QByteArray::const_reverse_iteratorrbegin() const
QByteArray &remove(qsizetype 位置, qsizetype 长度)
(since 6.5) QByteArray &removeAt(qsizetype 位置)
(since 6.5) QByteArray &removeFirst()
(since 6.1) QByteArray &removeIf(Predicate 谓词)
(since 6.5) QByteArray &removeLast()
QByteArray::reverse_iteratorrend()
QByteArray::const_reverse_iteratorrend() const
QByteArrayrepeated(qsizetype 次数) const
QByteArray &replace(qsizetype 位置, qsizetype 长度, QByteArrayView 之后的内容)
QByteArray &replace(qsizetype 位置, qsizetype 长度, const char *之后的内容, qsizetype 长度)
QByteArray &replace(char 之前的内容, QByteArrayView 之后的内容)
QByteArray &replace(const char *之前的内容, qsizetype 长度, const char *之后的内容, qsizetype 长度)
(自6.0起) QByteArray &replace(QByteArrayView 之前的内容, QByteArrayView 之后的内容)
QByteArray &replace(char 之前的内容, char 之后的内容)
voidreplace(qsizetype 大小)
voidresize(qsizetype 大小)
(since 6.4) voidresize(qsizetype 新大小, char 字符)
QByteArrayright(qsizetype 长度) const &
QByteArrayright(qsizetype 长度) &&
QByteArrayrightJustified(qsizetype 宽度, char 填充字符 = ' ', bool 截断 = false) const
QByteArray &setNum(int n, int 基数 = 10)
QByteArray &setNum(short n, int 基数 = 10)
QByteArray &setNum(ushort n, int 基数 = 10)
QByteArray &setNum(uint n, int 基数 = 10)
QByteArray &setNum(long n, int 基数 = 10)
QByteArray &setNum(ulong n, int 基数 = 10)
QByteArray &setNum(qlonglong n, int 基数 = 10)
QByteArray &setNum(quint64 n, int base = 10)
QByteArray &setNum(float n, char format = 'g', int precision = 6)
QByteArray &setNum(double n, char format = 'g', int precision = 6)
QByteArray &setRawData(const char *data, qDebugType size)
voidshrink_to_fit()
QByteArraysimplified() const
qsizetypesize() const
(自6.0起) QByteArraysliced(qsizetype pos, qsizetype n) const &
(自6.0起) QByteArraysliced(qsizetype pos) const &
(自6.0起) QByteArraysliced(qsizetype pos) &&
(自6.0起) QByteArraysliced(qsizetype pos, qsizetype n) &&
QList<QByteArray>split(char sep) const
voidsqueeze()
(自6.0起) boolstartsWith(QByteArrayView bv) const
boolstartsWith(char ch) const
voidswap(QByteArray &other)
QByteArraytoBase64(QByteArray::Base64Options options = Base64Encoding) const
CFDataReftoCFData() const
doubletoDouble(bool *ok = nullptr) const
(since 6.5) emscripten::valtoEcmaUint8Array()
floattoFloat(bool *ok = nullptr) const
QByteArraytoHex(char separator = '\0') const
inttoInt(bool *ok = nullptr, int base = 10) const
longtoLong(bool *ok = nullptr, int base = 10) const
qlonglongtoLongLong(bool *ok = nullptr, int base = 10) const
QByteArraytoLower() const
NSData *toNSData() const
QByteArraytoPercentEncoding(const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray(), char percent = '%') const
CFDataReftoRawCFData() const
NSData *toRawNSData() const
shorttoShort(bool *ok = nullptr, int base = 10) const
std::stringtoStdString() const
uinttoUInt(bool *ok = nullptr, int base = 10) const
ulongtoULong(bool *ok = nullptr, int base = 10) const
qulonglongtoULongLong(bool *ok = nullptr, int base = 10) const
ushorttoUShort(bool *ok = nullptr, int base = 10) const
QByteArraytoUpper() const
QByteArraytrimmed() const
voidtruncate(qsizetype pos)
const char *operator const char *() const
const void *operator const void *() const
booloperator!=(const QString &str) const
QByteArray &operator+=(const QByteArray &ba)
QByteArray &operator+=(char ch)
QByteArray &operator+=(const char *str)
booloperator<(const QString &str) const
booloperator<=(const QString &str) const
QByteArray &operator=(const QByteArray &other)
QByteArray &operator=(const char *str)
QByteArray &operator=(QByteArray &&other)
booloperator==(const QString &str) const
booloperator>(const QString &str) const
booloperator>=(const QString &str) const
char &operator[](qsizetype i)
charoperator[](qsizetype i) const

静态公共成员

QByteArrayfromBase64(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)
QByteArray::FromBase64ResultfromBase64Encoding(QByteArray &&base64, QByteArray::Base64Options options = Base64Encoding)
QByteArray::FromBase64ResultfromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)
QByteArrayfromCFData(CFDataRef data)
(since 6.5) QByteArrayfromEcmaUint8Array(emscripten::val uint8array)
QByteArrayfromHex(const QByteArray &hexEncoded)
QByteArrayfromNSData(const NSData *data)
QByteArrayfromPercentEncoding(const QByteArray &input, char percent = '%')
QByteArrayfromRawCFData(CFDataRef data)
QByteArrayfromRawData(const char *data, qsizetype size)
QByteArrayfromRawNSData(const NSData *data)
QByteArrayfromStdString(const std::string &str)
QByteArraynumber(int n, int base = 10)
QByteArraynumber(uint n, int base = 10)
QByteArraynumber(long n, int base = 10)
QByteArraynumber(ulong n, int base = 10)
QByteArraynumber(qlonglong n, int base = 10)
QByteArraynumber(qulonglong n, int base = 10)
QByteArraynumber(double n, char format = 'g', int precision = 6)
(since 6.1) qsizetypeerase(QByteArray &ba, const T &t)
(since 6.1) qsizetypeerase_if(QByteArray &ba, Predicate pred)
quint16qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309)
QByteArrayqCompress(const QByteArray &data, int compressionLevel = -1)
QByteArrayqCompress(const uchar *data, qsizetype nbytes, int compressionLevel = -1)
QByteArrayqUncompress(const QByteArray &data)
QByteArrayqUncompress(const uchar *data, qsizetype nbytes)
intqsnprintf(char *str, size_t n, const char *fmt, ...)
intqstrcmp(const char *str1, const char *str2)
char *qstrcpy(char *dst, const char *src)
char *qstrdup(const char *src)
intqstricmp(const char *str1, const char *str2)
size_tqstrlen(const char *str)
intqstrncmp(const char *str1, const char *str2, size_t len)
char *qstrncpy(char *dst, const char *src, size_t len)
intqstrnicmp(const char *str1, const char *str2, size_t len)
size_tqstrnlen(const char *str, size_t maxlen)
intqvsnprintf(char *str, size_t n, const char *fmt, va_list ap)
booloperator!=(const QByteArray &a1, const QByteArray &a2)
booloperator!=(const QByteArray &a1, const char *a2)
booloperator!=(const char *a1, const QByteArray &a2)
(since 6.4) QByteArrayoperator""_ba(const char *str, size_t size)
QByteArrayoperator+(const QByteArray &a1, const QByteArray &a2)
QByteArrayoperator+(const QByteArray &a1, const char *a2)
QByteArrayoperator+(const QByteArray &a1, char a2)
QByteArrayoperator+(const char *a1, const QByteArray &a2)
QByteArrayoperator+(char a1, const QByteArray &a2)
booloperator<(const QByteArray &a1, const QByteArray &a2)
booloperator<(const QByteArray &a1, const char *a2)
booloperator<(const char *a1, const QByteArray &a2)
QDataStream &operator<<(QDataStream &out, const QByteArray &ba)
booloperator<=(const QByteArray &a1, const QByteArray &a2)
booloperator<=(const QByteArray &a1, const char *a2)
booloperator<=(const char *a1, const QByteArray &a2)
booloperator==(const QByteArray &a1, const QByteArray &a2)
booloperator==(const QByteArray &a1, const char *a2)
booloperator==(const char *a1, const QByteArray &a2)
booloperator>(const QByteArray &a1, const QByteArray &a2)
booloperator>(const QByteArray &a1, const char *a2)
booloperator>(const char *a1, const QByteArray &a2)
booloperator>=(const QByteArray &a1, const QByteArray &a2)
booloperator>=(const QByteArray &a1, const char *a2)
booloperator>=(const char *a1, const QByteArray &a2)
QDataStream &operator>>(QDataStream &in, QByteArray &ba)

详细说明

QByteArray可以用来存储原始字节(包括'\0')和传统的8位'\0'终止的字符串。使用QByteArray比使用const char*要方便得多。在幕后,它始终确保数据后面跟随一个'\0'终止符,并使用隐式共享(写时复制)来减少内存使用并避免不必要的数据复制。

除了QByteArray,Qt还提供了QString类来存储字符串数据。对于大多数用途,你应该使用QString。QString将其内容解释为Unicode文本(使用UTF-16编码),而QByteArray旨在避免对其存储的字节编码或语义的假设(除了少数使用ASCII的遗留情况)。此外,QString在Qt API中随处可见。QByteArray适用的主要情况是当你需要存储原始二进制数据以及内存保护至关重要的场景(例如,在Qt for Embedded Linux中)。

初始化QByteArray的一种方法是将const char*传递给其构造函数。例如,以下代码创建了一个包含数据"Hello"的字节大小为5的数组

QByteArray ba("Hello");

尽管size()是5,但这个字节数组还在末尾维护了一个额外的'\0'字节,这样如果使用函数请求底层数据的指针(例如对data()的调用),指向的数据 guaranteed 会是'\0'终止的。

QByteArray对const char*数据进行深度复制,因此您可以稍后在修改它时不受副作用的影响。(如果您出于性能原因不想进行深度复制,请改用fromRawData().)

另一种方法是使用resize()设置数组的大小,并通过逐字节初始化数据。QByteArray使用从0开始的索引,就像C++数组。要访问特定索引位置的字节,您可以使用operator[]().在非const字节数组上,operator[]()返回对字节的引用,可用于赋值操作符的左边。例如

QByteArray ba;
ba.resize(5);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;

对于只读访问,可以使用at()的替代语法

for (qsizetype i = 0; i < ba.size(); ++i) {
    if (ba.at(i) >= 'a' && ba.at(i) <= 'f')
        cout << "Found character in range [a-f]" << endl;
}

at()可能比operator[]()更快,因为它永远不会导致deep copy的发生。

要一次提取多个字节,请使用first(),last()或sliced().

QByteArray可以嵌套'\0'字节。size()函数始终返回整个数组的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()。这些函数返回指向数据开头的指针。指针保证在调用QByteArray的非const函数之前保持有效。此外,还保证数据以'\0'字节结尾,除非QByteArray是从原始数据创建的。这个'\0'字节是由QByteArray自动提供的,并不计算在size()中。

QByteArray提供了以下基本功能来修改字节数据:append(),prepend(),insert(),replace(),以及remove()。例如

QByteArray x("and");
x.prepend("rock ");         // x == "rock and"
x.append(" roll");          // x == "rock and roll"
x.replace(5, 3, "&");       // x == "rock & roll"

在上面的示例中,replace()函数的前两个参数是从哪个位置开始替换以及需要替换的字节数。

当数据修改函数增加数组大小时,可能会导致QByteArray对象的内存的重新分配。当这种情况发生时,QByteArray会按需增长,以便为后续的增长留出空间,直到数组的大小急剧增加。

在处理大数组时,insert(),remove()函数,以及用不同大小的子数组替换时,replace()函数可能会很慢(线性时间),因为它们需要在内存中至少移动数组中的许多字节。

如果您是逐步构建QByteArray,并且预先知道QByteArray将包含的字节数大约是多少,您可以调用reserve(),要求QByteArray预先分配一定量的内存。您也可以调用capacity()来找出QByteArray实际分配了多少内存。

注意:由于隐式共享,使用非const运算符和函数可能导致QByteArray对数据进行深度复制。

QByteArray提供了STL风格的迭代器QByteArray::const_iteratorQByteArray::iterator)。在实践中,C++标准库提供的通用算法与迭代器一起使用时会很方便。

注意: 迭代器和QByteArray中单个元素的引用可能存在稳定性问题。QByteArray修改操作(例如insert()或remove)调用通常会使其失效。当需要稳定性和类似迭代器的功能时,应使用索引而不是迭代器,因为它们不受QByteArray内部状态的影响,因此不会失效。

注意: 当调用QByteArray的非const方法时,QByteArray的迭代器以及单个字节内的引用无法保证保持有效。在调用非const方法后访问此类迭代器或引用会导致未定义的行为。当需要类似迭代器的稳定性时,应使用索引而不是迭代器,因为它们不受QByteArray内部状态的影响,因此不会失效。

如果您想在QByteArray中找到特定字节或字节序列的所有出现,请使用indexOf()或lastIndexOf。前一个从给定的索引位置开始向前搜索,后者向后搜索。如果找到字节序列,两者都返回字节序列的索引位置;否则,它们返回-1。例如,以下是一个查找特定字符串所有出现的典型循环

QByteArray ba("We must be <b>bold</b>, very <b>bold</b>");
qsizetype j = 0;
while ((j = ba.indexOf("<b>", j)) != -1) {
    cout << "Found <b> tag at index position " << j << endl;
    ++j;
}

如果您只是想检查QByteArray中是否包含特定的字节序列,请使用contains。如果您想找出特定字节序列在字节数组中出现的次数,请使用count()。如果您想将特定值的所有出现替换为另一个值,请使用两个参数的replace()之一。

QByteArray 可以使用重载的运算符如 operator<(), operator<=(), operator==(), operator>=() 等 来进行比较。这种比较仅基于字节的数值并非常快,但不符合人类的预期。《QString::localeAwareCompare()》是一个更好的用于对用户界面字符串进行排序的选择。

由于历史原因,QByteArray 区分了空字节数组和空数组。一个空字节数组是使用 QByteArray 的默认构造函数或者通过将 (const char *)0 传递给构造函数初始化的。一个空数组是任何大小为 0 的字节数组。空字节数组总是空的,但空数组不一定是空的。

QByteArray().isNull();          // returns true
QByteArray().isEmpty();         // returns true

QByteArray("").isNull();        // returns false
QByteArray("").isEmpty();       // returns true

QByteArray("abc").isNull();     // returns false
QByteArray("abc").isEmpty();    // returns false

除了 isNull() 之外的所有函数都把空字节数组当作空数组对待。例如,data() 对于空字节数组会返回一个有效的指向 '\0' 字节的指针(不是 nullptr),而 QByteArray() 与 QByteArray("") 比较是相等的。我们建议您始终使用 isEmpty() 并避免 isNull()。

最大大小和内存不足条件

QByteArray 的最大大小取决于架构。大多数 64 位系统可以分配超过 2 GB 的内存,典型限制为 2^63 字节。实际值也取决于管理数据块所需的开销。因此,在 32 位平台上您期望的最大大小为 2 GB 减去开销,在 64 位平台上为 2^63 字节减去开销。一个 QByteArray 能存储的元素数量是这个最大大小。

当内存分配失败时,如果应用程序编译时打开了异常支持,QByteArray 会抛出一个 std::bad_alloc 异常。在 Qt 容器中的内存不足情况是 Qt 不会抛出异常的唯一情况。如果异常已被禁用,则内存不足是未定义的行为。

请注意,操作系统可能会对大量占用内存的应用程序施加进一步的限制,尤其是大型的连续内存块。这样的考虑,此类行为的配置或任何缓解措施都不在 QByteArray API 的范围之内。

C 位置和 ASCII 函数

QByteArray 通常将数据作为字节处理,不假设任何语义;当它假设语义时,它使用 C 位置和 ASCII 编码。标准的 Unicode 编码由 QString 支持,其他编码可以通过 QStringEncoderQStringDecoder 转换到 Unicode。用于特定于位置的文本解释,请使用 QLocaleQString

C 字符串

传统的 C 字符串,也称为 '\0' 结束的字符串,是一系列字节,由一个起点指定并隐式包含随后的每个字节,直到但不包括下一个 '\0' 字节为止。如果没有给出长度,接受此类指针的方法将把它作为这样的字节序列解释。这样一个序列通过构造不能包含 '\0' 字节。

其他重载接受一个起始指针和字节数;这些使用给定的字节数量,按照起始地址,不管它们中是否有任何是 '\0' 字节。在某些情况下,如果没有只接受指针的重载,传递长度为 -1 将导致方法使用指针后的第一个 '\0' 字节的偏移量作为长度;只有当方法明确表示它这样做(在这种情况下通常是一个默认参数)时,才应该传递长度为 -1。

空格字符

常见的需求是从字节数组中删除空格字符(例如 '\n''\t'' ' 等)。如果您想从 QByteArray 的两端删除空格,请使用 trimmed().如果您还想在字节数组中将空格字符的连续出现替换为一个空格字符,请使用 simplified().这些操作只识别ASCII空格字符。

数字-字符串转换

执行数值数据类型和字符串表示形式之间转换的函数在C区域设置中执行,无论用户的区域设置如何。使用 QLocale 来执行数值和字符串之间的区域设置感知转换。

字符大小写

在 QByteArray 中,大写、小写和大小写不敏感的比较的概念仅限于 ASCII。非ASCII字符被视为无大小写,因为其大小写取决于编码。这会影响支持大小写不敏感选项或更改其参数大小写的函数。这些函数包括 compare()、isLower()、isUpper()、toLower() 和 toUpper()。

此问题不影响 QString,因为它们使用 Unicode 来表示字符。

另请参阅QByteArrayViewQStringQBitArray

成员类型文档

enum QByteArray::Base64Option
flags QByteArray::Base64Options

此枚举包含可用于编码和解码 Base64 的选项。Base64 由 RFC 4648 定义,具有以下选项

常量描述
QByteArray::Base64Encoding0(默认) 常规Base64字母表,被称为“base64”
QByteArray::Base64UrlEncoding1一个替代字母表,被称为“base64url”,它将字母表中的两个字符替换为对URL更友好的版本。
QByteArray::KeepTrailingEquals0(默认) 保持编码数据末尾的填充等号,因此数据的大小总是4的倍数。
QByteArray::OmitTrailingEquals2省略在编码数据末尾添加填充等号。
QByteArray::IgnoreBase64DecodingErrors0在解码 Base64 编码的数据时,忽略输入中的错误;无效的字符被简单地跳过。这个枚举值是在 Qt 5.15 中添加的。
QByteArray::AbortOnBase64DecodingErrors4在解码 Base64 编码的数据时,遇到第一个解码错误时停止。这个枚举值是在 Qt 5.15 中添加的。

QByteArray::fromBase64Encoding() 和 QByteArray::fromBase64() 忽略了 KeepTrailingEquals 和 OmitTrailingEquals 选项。如果指定了 IgnoreBase64DecodingErrors 选项,则即使在尾部缺失等号或等号过多的情况下,它们也不会标记错误。如果指定了 AbortOnBase64DecodingErrors,则输入必须没有任何填充或具有正确数量的等号。

Base64Options 类型是 QFlags<Base64Option> 的别称。它存储了 Base64Option 值的或组合。

QByteArray::const_iterator

此类型定义提供了 QByteArray 的 STL 风格常量迭代器。

另请参阅 QByteArray::const_reverse_iteratorQByteArray::iterator

QByteArray::const_reverse_iterator

此类型定义提供了 QByteArray 的 STL 风格常量逆序迭代器。

另请参阅 QByteArray::reverse_iteratorQByteArray::const_iterator

QByteArray::iterator

此类型定义提供了 QByteArray 的 STL 风格非常量迭代器。

另请参阅 QByteArray::reverse_iteratorQByteArray::const_iterator

QByteArray::reverse_iterator

此类型定义提供了 QByteArray 的 STL 风格非常量逆序迭代器。

另请参阅 QByteArray::const_reverse_iteratorQByteArray::iterator

成员函数文档

const char *QByteArray::operator const char *() const

const void *QByteArray::operator const void *() const

注意: 在新的代码中,建议使用 constData()。

返回字节数组中存储的数据的指针。该指针可以用来访问组成数组的数据。数据以 '\0' 结尾。

只要没有发生断开连接,并且 QByteArray 没有被修改,指针都保持有效。

此操作符主要用于将字节数组传递给接受 const char * 的函数。

您可以在编译应用程序时通过定义 QT_NO_CAST_FROM_BYTEARRAY 来禁用此操作符。

注意: QByteArray 可以存储任何字节值,包括 '\0's,但大多数接受 char * 参数的函数都假设数据在遇到第一个 '\0' 处结束。

另请参阅 constData

QByteArray QByteArray::left(qsizetype len) &&

QByteArray QByteArray::left(qsizetype len) const &

返回包含此字节数组前 len 个字节的字节数组。

如果您知道 len 不会超出范围,则在新的代码中使用 first(),因为它更快。

如果 len 大于 size(),则返回整个字节数组。

如果 len 小于 0,则返回空的 QByteArray

另请参阅 first(),last(),startsWith(),chopped(),chop() 和 truncate

QByteArray QByteArray::right(qsizetype len) &&

返回一个包含此字节数组最后 len 个字节的字节数组。

如果您知道 len 不会超出范围,请在新的代码中使用 last(),因为它更快。

如果 len 大于 size(),则返回整个字节数组。

如果 len 小于 0,则返回空的 QByteArray

另请参阅endsWith(),last(),first(),sliced(),chopped(),chop() 和 truncate()。

QByteArray QByteArray::mid(qsizetype pos, qsizetype len = -1) &&

QByteArray QByteArray::mid(qsizetype pos, qsizetype len = -1) const &

返回一个包含从位置 pos 开始的 len 个字节的字节数组。

如果您知道 poslen 不会超出范围,请在新的代码中使用 sliced(),因为它更快。

如果 len 为 -1(默认值),或 pos + len >= size(),则返回从位置 pos 开始直到字节数组末尾的所有字节的字节数组。

另请参阅first(),last(),sliced(),chopped(),chop() 和 truncate()。

[since 6.0] QByteArray QByteArray::first(qsizetype n) &&

[since 6.0] QByteArray QByteArray::first(qsizetype n) const &

返回字节数组的前 n 个字节。

注意:n < 0 或 n > size() 时,行为是未定义的。

示例

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

此函数是在 Qt 6.0 中引入的。

另请参阅last(),sliced(),startsWith(),chopped(),chop() 和 truncate()。

[since 6.0] QByteArray QByteArray::last(qsizetype n) &&

[since 6.0] QByteArray QByteArray::last(qsizetype n) const &

返回字节数组的最后 n 个字节。

注意:n < 0 或 n > size() 时,行为是未定义的。

示例

QByteArray x("Pineapple");
QByteArray y = x.last(5);
// y == "apple"

此函数是在 Qt 6.0 中引入的。

另请参阅first(),sliced(),endsWith(),chopped(),chop() 和 truncate()。

[自6.0版本以来] QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) &&

[自6.0版本以来] QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) const &

返回一个字节数组,包含从位置 pos 开始的 n 个字节的此对象。

注意:pos < 0, n < 0,或者 pos + n > size() 时,行为未定义。

示例

QByteArray x("Five pineapples");
QByteArray y = x.sliced(5, 4);     // y == "pine"
QByteArray z = x.sliced(5);        // z == "pineapples"

此函数是在 Qt 6.0 中引入的。

另请参考:first(),last(),chopped(),chop(),以及 truncate

[自6.0版本以来] QByteArray QByteArray::sliced(qsizetype pos) &&

[自6.0版本以来] QByteArray QByteArray::sliced(qsizetype pos) const &

这是一个重载函数。

返回一个字节数组,包含从位置 pos 开始,直到对象末尾的字节。

注意:pos < 0 或 pos > size 时,行为未定义。

此函数是在 Qt 6.0 中引入的。

另请参阅first(),last(),sliced(),chopped(),chop() 和 truncate()。

QByteArray QByteArray::chopped(qsizetype len) &&

QByteArray QByteArray::chopped(qsizetype len) const &

返回一个字节数组,包含此字节数组最左边的 size() - len 个字节。

注意:如果 len 为负数或大于 size,行为未定义。

另请参考:endsWith(),first(),last(),sliced(),chop(),以及 truncate

[静态] QByteArray::FromBase64Result QByteArray::fromBase64Encoding(QByteArray &&base64, QByteArray::Base64Options options = Base64Encoding)

[静态] QByteArray::FromBase64Result QByteArray::fromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)

这是一个重载函数。

解码以Base64编码的数组 base64,使用定义的选项 options。如果 options 包含 IgnoreBase64DecodingErrors(默认情况),则不检查输入的有效性;输入中的无效字符将被跳过,允许解码过程继续处理后续字符。如果 options 包含 AbortOnBase64DecodingErrors,则解码会在第一个无效字符处停止。

例如

void process(const QByteArray &);

if (auto result = QByteArray::fromBase64Encoding(encodedData))
    process(*result);

解码Base64编码数据的算法在 RFC 4648 中定义。

返回一个包含解码数据和表示解码是否成功的标志的 QByteArrayFromBase64Result 对象。如果传入了 AbortOnBase64DecodingErrors 选项且输入数据无效,解码数据包含的内容是不确定的。

另请参阅 toBase64()。

[constexpr noexcept] QByteArray::QByteArray()

构建一个空字节数组。

另请参阅 isEmpty()。

QByteArray::QByteArray(const char *data, qsizetype size = -1)

构建包含数组 data 的前 size 个字节的字节数组。

如果 data 是 0,则构建一个空字节数组。

如果 size 是负数,则假定 data 指向一个以 '\0' 结尾的字符串,并动态确定其长度。

QByteArray 对字符串数据执行深度复制。

另请参阅 fromRawData()。

QByteArray::QByteArray(qsizetype size, char ch)

构建一个大小为 size 的字节数组,每个字节都设置为 ch

另请参阅 fill()。

QByteArray::QByteArray(qsizetype size, Qt::Initialization)

构建一个大小为 size 的字节数组,内容未初始化。

[noexcept] QByteArray::QByteArray(const QByteArray &other)

构建其他对象的副本。

此操作需要 恒定时间,因为 QByteArray 是 隐式共享的。这使得从函数中返回 QByteArray 非常快。如果修改了共享实例,则它将被复制(写入时复制),耗时 线性时间

另请参阅 operator=()。

[noexcept] QByteArray::QByteArray(QByteArray &&other)

移动构造一个 QByteArray 实例,使其指向 other 指向的同一对象。

[noexcept] QByteArray::~QByteArray()

销毁字节数组。

QByteArray &QByteArray::append(const QByteArray &ba)

将字节数组 ba 追加到该字节数组的末尾。

示例

QByteArray x("free");
QByteArray y("dom");
x.append(y);
// x == "freedom"

这与 insert(size(), ba) 相同。

注意:QByteArray 是一个 隐式共享 的类。因此,如果是向一个空的字节数组追加内容,该字节数组将仅共享 ba 中的数据。在这种情况下,不执行数据复制,耗时 恒定时间。如果共享实例被修改,它将被复制(写时复制),耗时 线性时间

如果追加的字节数组不为空,则会执行数据的深复制,耗时 线性时间

append() 函数通常非常快(恒定时间),因为 QByteArray 在数据末尾预分配额外的空间,因此可以在每次不需要重新分配整个数组的情况下增长。

另请参阅 操作符+=prependinsert

QByteArray &QByteArray::append(char ch)

这是一个重载函数。

将字节数据 ch 追加到此字节数组。

QByteArray &QByteArray::append(qsizetype count, char ch)

这是一个重载函数。

count 个字节数据 ch 追加到此字节数组,并返回对此字节数组的引用。

如果 count 为负或零,则不会向字节数组追加任何内容。

QByteArray &QByteArray::append(const char *str)

这是一个重载函数。

将以 '\0' 结尾的字符串 str 追加到此字节数组。

QByteArray &QByteArray::append(const char *str, qsizetype len)

这是一个重载函数。

str 起始处的第一个 len 个字节追加到此字节数组,并返回对此字节数组的引用。追加的字节可能包括 '\0' 字节。

如果 len 为负,则假定 str 为一个 '\0' 结尾的字符串,并且通过使用 qstrlen() 自动确定要复制的长度。

如果 len 为零或 str 为空,则不会向字节数组追加任何内容。请确保 len 不超过 str

QByteArray &QByteArray::append(QByteArrayView data)

这是一个重载函数。

data 追加到此字节数组。

[since 6.6] QByteArray &QByteArray::assign(QByteArrayView v)

v 的副本替换此字节数组的内容,并返回对此字节数组的引用。

此字节数组的大小将与 v 的大小相等。

只有当 v 的大小超过此字节数组的容量或此字节数组是共享的情况下,此函数才分配内存。

此函数首次在 Qt 6.6 中引入。

[since 6.6] QByteArray &QByteArray::assign(qsizetype n, char c)

n次复制的c替换此字节数组的内容,并返回对这个字节数组的引用。

此字节数组的长度将等于n,它必须是非负数。

如果n超过此字节数组的容量或此字节数组是共享的,则此函数将只分配内存。

此函数首次在 Qt 6.6 中引入。

另请参阅 fill()。

[since 6.6] 模板 <typename InputIterator, QByteArray::if_input_iterator<InputIterator> = true> QByteArray &QByteArray::assign(InputIterator first, InputIterator last)

用迭代器范围 [first, last]) 中的元素副本替换此字节数组的内容,并返回对这个字节数组的引用。

此字节数组的长度将与范围 [first, last]) 中的元素数量相等。

如果范围中的元素数量超过此字节数组的容量或此字节数组是共享的,则此函数将只分配内存。

注意:仅当InputIterator符合LegacyInputIterator的要求时,此函数重载才会参与重载解析。

注意:如果任一参数是*this的迭代器或 [first, last]) 不是有效的范围,则行为未定义。

此函数首次在 Qt 6.6 中引入。

char QByteArray::at(qsizetype i) const

返回字节数组中位置i上的字节。

i必须是字节数组中的有效索引位置(即,0 <= i < size()).

另请参阅operator[]().

char QByteArray::back() const

返回字节数组中的最后一个字节。与at(size() - 1)相同。

此函数提供以便与STL兼容。

警告:对一个空字节数组调用此函数构成未定义行为。

另请参阅front()、at() 和 operator[]().

char &QByteArray::back()

返回字节数组中最后一个字节的引用。与operator[](size() - 1)相同。

此函数提供以便与STL兼容。

警告:对一个空字节数组调用此函数构成未定义行为。

另请参阅front()、at() 和 operator[]().

QByteArray::iterator QByteArray::begin()

返回一个指向字节数组中第一个字节的STL-style迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另请参阅constBegin() 和 end().

[noexcept] QByteArray::const_iterator QByteArray::begin() const

此函数对begin进行重载。

qsizetype QByteArray::capacity() const

返回可以在不强制重新分配的情况下存储在字节数组中的最大字节数。

此函数的唯一目的是提供一个方法来微调 QByteArray 的内存使用。一般来说,您很少需要调用此函数。如果想知道字节数组中有多少字节,请调用 size()。

注意:静态分配的字节数组将报告容量为 0,即使它不是空的。

注意:分配的内存块中的空闲空间位置是未定义的。换句话说,不应该假设空闲内存总是位于初始化元素之后。

另外参见reserve() 和 squeeze()。

[noexcept] QByteArray::const_iterator QByteArray::cbegin() const

返回指向字节数组中第一个字节的 const STL-style 迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另外参见begin() 和 cend()。

[noexcept] QByteArray::const_iterator QByteArray::cend() const

返回指向字节数组最后一个字节之后的 const STL-style 迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另外参见cbegin() 和 end()。

void QByteArray::chop(qsizetype n)

从字节数组末尾去除 n 个字节。

如果 n 大于 size(),则结果是一个空字节数组。

示例

QByteArray ba("STARTTLS\r\n");
ba.chop(2);                 // ba == "STARTTLS"

另外参见truncate(),resize() 和 first()。

void QByteArray::clear()

清除字节数组的内容并使其为空。

另外参见resize() 和 isNull()。

[noexcept, since 6.0] int QByteArray::compare(QByteArrayView bv, Qt::CaseSensitivity cs = Qt::CaseSensitive) const

根据此 QByteArray 是否在 QByteArrayView bv 前面、与其在同一位置或在其后面进行排序,返回小于、等于或大于零的整数值。比较是按照大小写敏感度 cs 进行的。

此函数是在 Qt 6.0 中引入的。

另外参见operator==Character Case.

[noexcept] QByteArray::const_iterator QByteArray::constBegin() const

返回指向字节数组中第一个字节的 const STL-style 迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另外参见begin() 和 constEnd()。

[noexcept] const char *QByteArray::constData() const

返回指向存储在字节数组中的 const 数据的指针。此指针可用于访问组成数组的字节。除非 QByteArray 对象是从原始数据创建的,否则数据是 '\0' 结尾的。

只要没有发生断开连接,并且 QByteArray 没有被修改,指针都保持有效。

此功能主要用于将字节数组传递给接受 const char * 的函数。

注意: QByteArray 可以存储任何字节值,包括 '\0's,但大多数接受 char * 参数的函数都假设数据在遇到第一个 '\0' 处结束。

另请参阅 data(),operator[]() 和 fromRawData()。

[noexcept] QByteArray::const_iterator QByteArray::constEnd() const

返回指向字节数组最后一个字节之后的 const STL-style 迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另请参阅constBegin() 和 end().

[since 6.0] bool QByteArray::contains(QByteArrayView bv) const

如果此字节数组包含由 bv 观看的字节数序列,则返回 true;否则返回 false

此函数是在 Qt 6.0 中引入的。

另请参阅 indexOf() 和 count()。

bool QByteArray::contains(char ch) const

这是一个重载函数。

如果字节数组中包含字节 ch,则返回 true;否则返回 false

[since 6.0] qsizetype QByteArray::count(QByteArrayView bv) const

返回在当前字节数组中由 bv 观看的字节数序列的(可能重叠的)出现次数。

此函数是在 Qt 6.0 中引入的。

另请参阅 contains() 和 indexOf()。

qsizetype QByteArray::count(char ch) const

这是一个重载函数。

返回字节数组中字节 ch 的出现次数。

另请参阅 contains() 和 indexOf()。

[noexcept] QByteArray::const_reverse_iterator QByteArray::crbegin() const

返回一个指向字节数组开始字节(反向顺序)的 const STL-style 反向迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另请参阅 begin(),rbegin() 和 rend()。

[noexcept] QByteArray::const_reverse_iterator QByteArray::crend() const

返回一个指向字节数组末尾后(反向顺序)的 const STL-style 反向迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另请参阅 end(),rend() 和 rbegin()。

char *QByteArray::data()

返回指向字节数组中存储数据的指针。此指针可用于访问和修改数组组成的字节。数据以 '\0' 结尾,即从返回的指针后可以访问的字节数为 size() + 1,包括 '\0' 终止符。

示例

QByteArray ba("Hello world");
char *data = ba.data();
while (*data) {
    cout << "[" << *data << "]" << endl;
    ++data;
}

只要没有发生断开连接,并且 QByteArray 没有被修改,指针都保持有效。

对于只读访问,constData() 比较快,因为它不会导致发生 深复制

此功能主要用于将字节数组传递给接受 const char * 的函数。

以下示例通过 data() 返回 char* 的副本,但由于它没有为末尾的 '\0' 分配一个字节,因此将破坏堆并导致崩溃

QString tmp = "test";
QByteArray text = tmp.toLocal8Bit();
char *data = new char[text.size()];
strcpy(data, text.data());
delete [] data;

这个则分配了正确的空间

QString tmp = "test";
QByteArray text = tmp.toLocal8Bit();
char *data = new char[text.size() + 1];
strcpy(data, text.data());
delete [] data;

注意: QByteArray 可以存储任何字节值,包括 '\0's,但大多数接受 char * 参数的函数都假设数据在遇到第一个 '\0' 处结束。

另请参阅 constData() 和 operator[]()。

[noexcept] const char *QByteArray::data() const

这是一个重载函数。

QByteArray::iterator QByteArray::end()

返回一个指向字节数组中最后一个字节之后的STL样式迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另外参见begin() 和 constEnd()。

[noexcept] QByteArray::const_iterator QByteArray::end() const

此函数重载了end()。

[since 6.0] bool QByteArray::endsWith(QByteArrayView bv) const

如果此字节数组以由bv查看的字节序列结束,则返回true; 否则返回false

示例

QByteArray url("http://qt-project.org/doc/qt-5.0/qtdoc/index.html");
if (url.endsWith(".html"))
    ...

此函数是在 Qt 6.0 中引入的。

另请参阅startsWith() 和 last()。

bool QByteArray::endsWith(char ch) const

这是一个重载函数。

如果此字节数组以字节ch结束,则返回true; 否则返回false

[since 6.1] QByteArray::iterator QByteArray::erase(QByteArray::const_iterator first, QByteArray::const_iterator last)

从字节数组中移除位于半开区间[ first , last )内的字符。返回一个迭代器,指向删除之前的last指向的字符。

此函数是在Qt 6.1中引入的。

[since 6.5] QByteArray::iterator QByteArray::erase(QByteArray::const_iterator it)

从字节数组中删除由 it 指示的字符。返回一个迭代器,指向删除后的下一个字符。

QByteArray ba = "abcdefg";
auto it = ba.erase(ba.cbegin()); // ba is now "bcdefg" and it points to "b"

此函数是在Qt 6.5中引入的。

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

将字节数组中的每个字节设置为ch。如果size不同於-1(默认值),字节数组将在之前调整大小至size

示例

QByteArray ba("Istambul");
ba.fill('o');
// ba == "oooooooo"

ba.fill('X', 2);
// ba == "XX"

另请参阅resize()。

[static] QByteArray QByteArray::fromBase64(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)

返回Base64数组base64的解码副本,使用由options定义的选项。如果options包含IgnoreBase64DecodingErrors(默认值),则输入不进行检查是否有效;跳过输入中的无效字符,使解码过程可以继续使用随后的字符。如果options包含AbortOnBase64DecodingErrors,则解码将在第一个无效字符处停止。

例如

QByteArray text = QByteArray::fromBase64("UXQgaXMgZ3JlYXQh");
text.data();            // returns "Qt is great!"

QByteArray::fromBase64("PHA+SGVsbG8/PC9wPg==", QByteArray::Base64Encoding); // returns "<p>Hello?</p>"
QByteArray::fromBase64("PHA-SGVsbG8_PC9wPg==", QByteArray::Base64UrlEncoding); // returns "<p>Hello?</p>"

解码Base64编码数据的算法在 RFC 4648 中定义。

返回解码数据,如果传递了AbortOnBase64DecodingErrors选项并且输入数据无效,则返回一个空字节数组。

注意:建议在新的代码中使用fromBase64Encoding() 函数。

另请参阅 toBase64() 和 fromBase64Encoding().

[静态] QByteArray QByteArray::fromCFData(CFDataRef data)

构造一个新的QByteArray,包含CFData data的副本。

另请参阅 fromRawCFData(),fromRawData(),toRawCFData() 和 toCFData().

[静态,自6.5起] QByteArray QByteArray::fromEcmaUint8Array(emscripten::val uint8array)

构造一个新的QByteArray,包含Uint8Array uint8array的副本。

此函数将数据从JavaScript数据缓冲区(无法从C++代码中寻址)转移到由QByteArray拥有的堆内存中。Uint8Array可以使用复制完成后释放。

参数uint8array必须是一个指向Uint8Array对象的emscripten::val引用,例如从全局JavaScript变量中获取

emscripten::val uint8array = emscripten::val::global("g_uint8array");
QByteArray byteArray = QByteArray::fromEcmaUint8Array(uint8array);

如果Uint8Array的大小超过QByteArray的最大容量,或者如果uint8array参数不是Uint8Array类型,则此函数返回一个null QByteArray

此函数是在Qt 6.5中引入的。

另请参阅 toEcmaUint8Array().

[静态] QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)

返回一个十六进制编码数组hexEncoded的解码副本。输入未进行验证;跳过输入中的无效字符,允许解码过程在后续字符中继续。

例如

QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data();            // returns "Qt is great!"

另请参阅 toHex().

[静态] QByteArray QByteArray::fromNSData(const NSData *data)

构造一个新的QByteArray,包含NSData data的副本。

另请参阅 fromRawNSData(),fromRawData(),toNSData() 和 toRawNSData().

[静态] QByteArray QByteArray::fromPercentEncoding(const QByteArray &input, char percent = '%')

input从URI/URL风格的百分编码解码。

返回包含解码文本的字节数组。参数percent允许使用不同于'%'(例如'_'或'=')的字符作为转义字符。相当于input.percentDecoded(percent)。

例如

QByteArray text = QByteArray::fromPercentEncoding("Qt%20is%20great%33");
qDebug("%s", text.data());      // reports "Qt is great!"

另请参阅 percentDecoded().

[静态] QByteArray QByteArray::fromRawCFData(CFDataRef data)

使用CFData的bytes构建一个QByteArray

不复制data的bytes。

调用者保证只要这个QByteArray对象存在,CFData就不会被删除或修改。

另请参阅fromCFData()、fromRawData()、toRawCFData()和toCFData

[静态] QByteArray QByteArray::fromRawData(const char *data, qsizetype size)

使用data数组的第一个size个bytes构建一个QByteArray。bytes不会复制。QByteArray将包含data指针。调用者保证只要这个QByteArray和任何复制存在而未被修改,data就不会被删除或修改。换句话说,因为QByteArray是一个隐式共享的类,而且这个函数返回的实例包含data指针,调用者不准修改data或者直接删除它。然而QByteArray并不著作权data,所以QByteArray析构函数永远不会删除原始data,即使最后一个引用data的QByteArray被销毁。

随后尝试修改返回的QByteArray或其任何复制的内容,在修改前将创建data数组的深拷贝。这确保原始data数组本身不会被QByteArray修改。

以下是如何在没有将原始数据复制到QByteArray中的情况下,使用QDataStream读取内存中的原始数据的示例。

 static const char mydata[] = {
    '\x00', '\x00', '\x03', '\x84', '\x78', '\x9c', '\x3b', '\x76',
    '\xec', '\x18', '\xc3', '\x31', '\x0a', '\xf1', '\xcc', '\x99',
    ...
    '\x6d', '\x5b'
};

QByteArray data = QByteArray::fromRawData(mydata, sizeof(mydata));
QDataStream in(&data, QIODevice::ReadOnly);
...

警告:使用fromRawData()创建的字节数组未经'\0'结束,除非原始数据在位置size处包含'\0'字节。虽然这对QDataStream或如indexOf()之类的函数来说并不重要,但将字节数组传递给期望是'\0'-terminated的接受const char *的函数将会失败。

另请参阅setRawData()、data()和constData

[静态] QByteArray QByteArray::fromRawNSData(const NSData *data)

使用NSData的bytes构建一个QByteArray

不复制data的bytes。

调用者保证只要这个QByteArray对象存在,NSData就不会被删除或修改。

另请参阅fromNSData()、fromRawData()、toRawNSData()和toNSData

[静态] QByteArray QByteArray::fromStdString(const std::string &str)

返回str字符串的QByteArray副本。

另请参阅toStdString()和QString::fromStdString

char QByteArray::front() const

返回字节数组的第一个字节。等同于 at(0)

此函数提供以便与STL兼容。

警告:对一个空字节数组调用此函数构成未定义行为。

另请参阅 back(),at() 和 operator[]

char &QByteArray::front()

返回对字节数组第一个字节的引用。等同于 operator[](0)

此函数提供以便与STL兼容。

警告:对一个空字节数组调用此函数构成未定义行为。

另请参阅 back(),at() 和 operator[]

[自 6.0] qsizetype QByteArray::indexOf(QByteArrayView bv, qsizetype from = 0) const

返回在此字节数组中查看的 bv 字节序列首次出现的起始索引位置,从索引位置 from 开始搜索。如果没有找到匹配项,则返回 -1。

示例

QByteArray x("sticky question");
QByteArrayView 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

此函数是在 Qt 6.0 中引入的。

另请参阅 lastIndexOf(),contains() 和 count

qsizetype QByteArray::indexOf(char ch, qsizetype from = 0) const

这是一个重载函数。

返回在此字节数组中从索引位置 from 开始搜索的字节 ch 首次出现的起始索引位置。如果没有找到匹配项,则返回 -1。

示例

QByteArray ba("ABCBA");
ba.indexOf("B");            // returns 1
ba.indexOf("B", 1);         // returns 1
ba.indexOf("B", 2);         // returns 3
ba.indexOf("X");            // returns -1

另请参阅 lastIndexOf() 和 contains

[自 6.0] QByteArray &QByteArray::insert(qsizetype i, QByteArrayView data)

在索引位置 i 插入 data 并返回对此字节数组的引用。

示例

QByteArray ba("Meal");
ba.insert(1, QByteArrayView("ontr"));
// ba == "Montreal"

对于大型字节数组,此操作可能较慢(线性时间),因为它需要将索引 i 及其以上的所有字节至少移动一个位置。

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

此函数是在 Qt 6.0 中引入的。

另请参阅 append(),prepend(),replace() 和 remove

QByteArray &QByteArray::insert(qsizetype i, const char *s)

在索引位置 i 插入 s 并返回对此字节数组的引用。

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

函数等同于 insert(i, QByteArrayView(s))

另请参阅 append(),prepend(),replace() 和 remove

QByteArray &QByteArray::insert(qsizetype i, const QByteArray &data)

在索引位置 i 插入 data 并返回对此字节数组的引用。

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

另请参阅 append(),prepend(),replace() 和 remove

QByteArray &QByteArray::insert(qsizetype i, qsizetype count, char ch)

这是一个重载函数。

在字节数组的索引位置 i 插入 count 个字节 ch 复制。

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

QByteArray &QByteArray::insert(qsizetype i, char ch)

这是一个重载函数。

在字节数组中索引位置i插入字节ch

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

QByteArray &QByteArray::insert(qsizetype i, const char *data, qsizetype len)

这是一个重载函数。

在字节数组中从data开始索引位置i插入len字节。

此数组调整大小以容纳插入。如果 i 位于数组末尾之外,则首先使用空格字符扩展数组以到达此 i

[noexcept] bool QByteArray::isEmpty() const

如果字节数组大小为0,则返回true;否则返回false

示例

QByteArray().isEmpty();         // returns true
QByteArray("").isEmpty();       // returns true
QByteArray("abc").isEmpty();    // returns false

另请参阅size

bool QByteArray::isLower() const

如果此字节数组是小写,即是其toLower()折叠的等价物,则返回true

请注意,这并不意味着字节数组只包含小写字母;仅仅是它不包含ASCII大写字母。

另请参阅isUpper()和toLower

[noexcept] bool QByteArray::isNull() const

如果此字节数组是null,则返回true;否则返回false

示例

QByteArray().isNull();          // returns true
QByteArray("").isNull();        // returns false
QByteArray("abc").isNull();     // returns false

Qt出于历史原因区分null字节数组和空字节数组。对于大多数应用程序来说,重要的是一个字节数组是否包含任何数据,这可以使用isEmpty()确定。

另请参阅 isEmpty()。

bool QByteArray::isUpper() const

如果此字节数组是大写,即与它的toUpper()折叠相同,则返回true

请注意,这并不意味着字节数组只包含大写字母;仅表示它不包含ASCII小写字母。

另请参阅isLower()和toUpper

[since 6.3] bool QByteArray::isValidUtf8() const

如果此字节数组包含有效的UTF-8编码数据,则返回true,否则返回false

此函数自Qt 6.3引入。

[since 6.0] qsizetype QByteArray::lastIndexOf(QByteArrayView bv, qsizetype from) const

返回在此字节数组中通过bv查看的最后一个字节序列的起始索引位置,从索引位置from开始搜索。

如果from是-1,则搜索从最后一个字符开始;如果是-2,则从倒数第二个字符开始,以此类推。

如果没有找到匹配项,则返回-1。

示例

QByteArray x("crazy azimuths");
QByteArrayView 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

注意:当你搜索长度为0的 bv 时,由于使用了一个负的 from,即使 -1 通常被理解为从字节数组的末尾开始搜索,匹配数据末尾的搜索将被排除。因为匹配位置在最后一个字符 之后,所以被排除。要包括这样的最后一个空匹配,可以为 from 提供一个正值,或者完全省略 from 参数。

此函数是在 Qt 6.0 中引入的。

另请参阅 indexOf(),contains() 和 count()。

qsizetype QByteArray::lastIndexOf(char ch, qsizetype from = -1) const

这是一个重载函数。

返回字节数组中字节数据 ch 最后出现的索引位置,搜索方向从索引位置 from 开始。如果 from 为 -1(默认值),则从最后一个字节开始搜索(索引为 size() - 1)。如果没有找到匹配项,则返回 -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

另请参阅 indexOf() 和 contains()。

[since 6.2] qsizetype QByteArray::lastIndexOf(QByteArrayView bv) const

这是一个重载函数。

返回从字节数组末尾开始的 bv 视图的字节序列最后一次出现的起始索引位置。如果没有找到匹配项,则返回 -1。

示例

QByteArray x("crazy azimuths");
QByteArrayView 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

此函数是在 Qt 6.2 中引入的。

另请参阅 indexOf(),contains() 和 count()。

QByteArray QByteArray::leftJustified(qsizetype width, char fill = ' ', bool truncate = false) const

返回一个大小为 width 的字节数组,其中包含填充了 fill 字节的此字节数组。

如果 truncate 为 false 且字节数组的 size() 大于 width,则返回的字节数组是此字节数组的副本。

如果 truncate 为 true 且字节数组的 size() 大于 width,则删除字节数组位置 width 后的任何字节,并返回副本。

示例

QByteArray x("apple");
QByteArray y = x.leftJustified(8, '.');   // y == "apple..."

另请参阅 rightJustified()。

[noexcept] qsizetype QByteArray::length() const

size() 相同。

[static] QByteArray QByteArray::number(int n, int base = 10)

返回表示整数 n 的文本的字节数组。

返回一个包含表示 n 的字符串的字节数组,使用指定的 base(默认为十进制)。支持的基数从 2 到 36,使用字母表示大于 9 的数字:A 是十,B 是十一,依此类推。

示例

int n = 63;
QByteArray::number(n);              // returns "63"
QByteArray::number(n, 16);          // returns "3f"
QByteArray::number(n, 16).toUpper();  // returns "3F"

注意:数字的格式不是本地化的;无论用户的区域设置如何,都使用默认的 C 区域设置。使用 QLocale 来执行数字和字符串之间的区域感知转换。

另请参阅 setNum() 和 toInt()。

[静态] QByteArray QByteArray::number(uint n, int base = 10)

这是一个重载函数。

另请参阅toUInt()。

[静态] QByteArray QByteArray::number(long n, int base = 10)

这是一个重载函数。

另请参阅toLong()。

[静态] QByteArray QByteArray::number(ulong n, int base = 10)

这是一个重载函数。

另请参阅toULong()。

[静态] QByteArray QByteArray::number(qlonglong n, int base = 10)

这是一个重载函数。

另请参阅toLongLong()。

[静态] QByteArray QByteArray::number(qulonglong n, int base = 10)

这是一个重载函数。

另请参阅toULongLong()。

[静态] QByteArray QByteArray::number(double n, char format = 'g', int precision = 6)

这是一个重载函数。

返回表示浮点数 n 的字节数组文本。

返回包含表示 n 的字符串的字节数组,具有给定的 格式精度,意义与 QString::number(double, char, int) 相同。例如

QByteArray ba = QByteArray::number(12.3456, 'E', 3);
// ba == 1.235E+01

另请参阅toDouble() 和 QLocale::FloatingPointPrecisionOption

[自 6.4 开始] QByteArray QByteArray::percentDecoded(char percent = '%') const

解码 URI/URL 样式的百分号编码。

返回包含解码文本的字节数组。参数 percent 允许使用不同于 '%' 的字符(例如 '_' 或 '=') 作为转义字符。

例如

QByteArray encoded("Qt%20is%20great%33");
QByteArray decoded = encoded.percentDecoded(); // Set to "Qt is great!"

注意:给定无效的输入(例如包含 "%G5" 序列的字符串,这不是一个有效的十六进制数字),输出也将无效。例如:"%G5" 可解码为 'W'。

此函数自 Qt 6.4 开始引入。

另请参阅toPercentEncoding() 和 QUrl::fromPercentEncoding

QByteArray &QByteArray::prepend(QByteArrayView ba)

将字节数组视图 ba 插入到这个字节数组的前面,并返回对这个字节数组的引用。

此操作通常非常快(恒定时间),因为 QByteArray 在数据开头预留了额外的空间,因此它可以在不重新分配整个数组的情况下增长。

示例

QByteArray x("ship");
QByteArray y("air");
x.prepend(y);
// x == "airship"

这与 insert(0, ba) 相同。

另请参阅 append() 和 insert()。

QByteArray &QByteArray::prepend(char ch)

这是一个重载函数。

将字节 ch 预先附加到这个字节数组。

QByteArray &QByteArray::prepend(qsizetype count, char ch)

这是一个重载函数。

将字节 chcount 个副本预先附加到这个字节数组。

QByteArray &QByteArray::prepend(const char *str)

这是一个重载函数。

将以 '\0' 终止的字符串 str 预先附加到这个字节数组。

QByteArray &QByteArray::prepend(const char *str, qsizetype len)

这是一个重载函数。

str 开始的 len 个字节预先附加到这个字节数组。附加的字节可能包含 '\0' 字节。

QByteArray &QByteArray::prepend(const QByteArray &ba)

这是一个重载函数。

ba 预先附加到这个字节数组。

void QByteArray::push_back(const QByteArray &other)

此函数为 STL 兼容性提供。它等效于 append(other)。

void QByteArray::push_back(char ch)

这是一个重载函数。

等同于 append(ch)。

void QByteArray::push_back(const char *str)

这是一个重载函数。

等同于 append(str)。

[since 6.0] void QByteArray::push_back(QByteArrayView str)

这是一个重载函数。

等同于 append(str)。

此函数是在 Qt 6.0 中引入的。

void QByteArray::push_front(const QByteArray &other)

此函数为 STL 兼容性提供。它等效于 prepend(other)。

void QByteArray::push_front(char ch)

这是一个重载函数。

等同于 prepend(ch)。

void QByteArray::push_front(const char *str)

这是一个重载函数。

等同于 prepend(str)。

[since 6.0] void QByteArray::push_front(QByteArrayView str)

这是一个重载函数。

等同于 prepend(str)。

此函数是在 Qt 6.0 中引入的。

QByteArray::reverse_iterator QByteArray::rbegin()

返回一个指向字节数组中第一个字节(反向顺序)的 STL 样式 反向迭代器。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

另请参阅 begin(),crbegin() 和 rend()。

[noexcept] QByteArray::const_reverse_iterator QByteArray::rbegin() const

这是一个重载函数。

QByteArray &QByteArray::remove(qsizetype pos, qsizetype len)

从数组的索引位置 pos 开始,移除 len 个字节,并返回数组的引用。

如果 pos 超出范围,则不会发生任何操作。如果 pos 有效,但 pos + len 大于数组的长度,则数组将在 pos 位置截断。

示例

QByteArray ba("Montreal");
ba.remove(1, 4);
// ba == "Meal"

元素移除将会保留数组的容量,不会减少分配的内存额。要在数组的最后更改大小后释放尽可能多的内存,调用 squeeze() 方法。

相关函数insert(), replace(), 以及 squeeze().

[since 6.5] QByteArray &QByteArray::removeAt(qsizetype pos)

移除索引位置 pos 的字符。如果 pos 超出范围(即 pos >= size()),则该函数不执行任何操作。

此函数是在Qt 6.5中引入的。

相关函数remove().

[since 6.5] QByteArray &QByteArray::removeFirst()

从字节数组中移除第一个字符。如果字节数组为空,该函数不执行任何操作。

此函数是在Qt 6.5中引入的。

相关函数remove().

[since 6.1] template <typename Predicate> QByteArray &QByteArray::removeIf(Predicate pred)

从字节数组中移除所有使谓词 pred 返回 true 的字节。返回字节数组的引用。

此函数是在Qt 6.1中引入的。

相关函数remove().

[since 6.5] QByteArray &QByteArray::removeLast()

从字节数组中移除最后一个字符。如果字节数组为空,该函数不执行任何操作。

此函数是在Qt 6.5中引入的。

相关函数remove().

QByteArray::reverse_iterator QByteArray::rend()

返回一个 STL-style 逆序迭代器,指向字节数组的最后一个字节之后,按逆序排列。

警告:在解除连接或修改QByteArray时,返回的迭代器将被无效化。

相关函数end(), crendrbegin().

[noexcept] QByteArray::const_reverse_iterator QByteArray::rend() const

这是一个重载函数。

QByteArray QByteArray::repeated(qsizetype times) const

返回当前字节数组重复指定次数的副本。

如果 times 小于 1,则返回一个空字节数组。

示例

QByteArray ba("ab");
ba.repeated(4);             // returns "abababab"

QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, QByteArrayView after)

用字节数组 after 中的字节替换从索引位置 pos 开始的 len 个字节,并返回对当前字节数组的引用。

示例

QByteArray x("Say yes!");
QByteArray y("no");
x.replace(4, 3, y);
// x == "Say no!"

另请参阅insert()和remove()。

QByteArray &QByteArray::replace(qsizetype pos, qsizetype len, const char *after, qsizetype alen)

这是一个重载函数。

从索引位置pos开始用alen字节数据替换len字节。插入的数据可能包括'\0'字节。

QByteArray &QByteArray::replace(char before, QByteArrayView after)

这是一个重载函数。

将每个出现的字节before替换为字节序列after

QByteArray &QByteArray::replace(const char *before, qsizetype bsize, const char *after, qsizetype asize)

这是一个重载函数。

将起始于beforebsize字节每个都替换为起始于afterasize字节。由于字符串大小由bsizeasize指定,因此它们可能包含'\0'字节,并且不需要'\0'终止。

[自6.0起] QByteArray &QByteArray::replace(QByteArrayView before, QByteArrayView after)

这是一个重载函数。

将每个出现的字节序列before替换为字节序列after

示例

QByteArray ba("colour behaviour flavour neighbour");
ba.replace(QByteArray("ou"), QByteArray("o"));
// ba == "color behavior flavor neighbor"

此函数是在 Qt 6.0 中引入的。

QByteArray &QByteArray::replace(char before, char after)

这是一个重载函数。

将每个出现的字节before替换为字节after

void QByteArray::reserve(qsizetype size)

尝试分配至少size字节的内存。

如果你事先知道字节数组的大小,可以调用此函数,并且如果你经常调用resize(),你很可能会获得更好的性能。

如果你不确定需要多少空间,通常最好使用一个上限作为size,或者是对最可能的大小的一个高估值,如果严格的上限会远大于这个值。如果size是一个低估,当预留的大于所需大小时,数组将根据需要进行扩展,这可能导致比最佳高估更大的分配,并且会减慢触发它的操作。

注意:reserve()会保留内存,但不会更改字节数组的大小。访问字节数组末尾之外的数据是未定义的行为。如果你需要访问当前数组末尾之外的数据,请使用resize()。

此函数的唯一目的是为了提供一种微调QByteArray内存使用的方法。通常,你很少需要调用此函数。

另请参阅squeeze()和capacity()。

void QByteArray::resize(qsizetype size)

将字节数组的大小设置为size字节。

如果大小大于当前大小,字节数组将扩展以使其达到大小字节,额外的字节将添加到末尾。新的字节未初始化。

如果大小小于当前大小,则从字节数组中排除大小位置之外的字节。

注意:虽然resize()会在需要时增加容量,但它永远不会减少容量。要释放多余容量,请使用squeeze

另请参阅 size(),truncate()和squeeze

[自6.4起] void QByteArray::resize(qsizetype newSize, char c)

将字节数组的大小设置为newSize字节。

如果newSize大于当前大小,则字节数组将扩展以使其达到newSize字节,额外的字节将添加到末尾。新的字节初始化为c

如果newSize小于当前大小,则从字节数组中排除newSize位置之外的字节。

注意:虽然resize()会在需要时增加容量,但它永远不会减少容量。要释放多余容量,请使用squeeze

此函数自 Qt 6.4 开始引入。

另请参阅 size(),truncate()和squeeze

QByteArray QByteArray::rightJustified(qsizetype width, char fill = ' ', bool truncate = false) const

返回一个包含fill字节和此字节数组的字节数组,长度为width

如果truncate为false且字节数组的大小大于width,则返回的字节数组是此字节数组的副本。

如果truncate为true且字节数组的大小大于width,则结果字节数组将在位置width处截断。

示例

QByteArray x("apple");
QByteArray y = x.rightJustified(8, '.');    // y == "...apple"

另请参阅 leftJustified

QByteArray &QByteArray::setNum(int n, int base = 10)

将整数n表示为文本。

将此字节数组设置为表示n的字符串,基数base(默认为十),并返回对此字节数组的引用。支持2到36的基数,使用字母表示超出9的数字;A表示十,B表示十一,依此类推。

示例

QByteArray ba;
int n = 63;
ba.setNum(n);           // ba == "63"
ba.setNum(n, 16);       // ba == "3f"

注意:数字的格式不是本地化的;无论用户的区域设置如何,都使用默认的 C 区域设置。使用 QLocale 来执行数字和字符串之间的区域感知转换。

另请参阅 number()和toInt()。

QByteArray &QByteArray::setNum(short n, int base = 10)

这是一个重载函数。

另请参阅 toShort

QByteArray &QByteArray::setNum(ushort n, int base = 10)

这是一个重载函数。

另请参阅 toUShort

QByteArray &QByteArray::setNum(uint n, int base = 10)

这是一个重载函数。

另请参阅toUInt()。

QByteArray &QByteArray::setNum(long n, int base = 10)

这是一个重载函数。

另请参阅toLong()。

QByteArray &QByteArray::setNum(ulong n, int base = 10)

这是一个重载函数。

另请参阅toULong()。

QByteArray &QByteArray::setNum(qlonglong n, int base = 10)

这是一个重载函数。

另请参阅toLongLong()。

QByteArray &QByteArray::setNum(qulonglong n, int base = 10)

这是一个重载函数。

另请参阅toULongLong()。

QByteArray &QByteArray::setNum(float n, char format = 'g', int precision = 6)

这是一个重载函数。

将浮点数n表示为文本。

将此字节数组设置为表示n的字符串,并指定了formatprecision(与QString::number(double, char, int))的含义相同),并返回对此字节数组的引用。

另请参阅toFloat()。

QByteArray &QByteArray::setNum(double n, char format = 'g', int precision = 6)

这是一个重载函数。

将浮点数n表示为文本。

将此字节数组设置为表示n的字符串,并指定了formatprecision(与QString::number(double, char, int))的含义相同),并返回对此字节数组的引用。

另请参阅toDouble() 和 QLocale::FloatingPointPrecisionOption

QByteArray &QByteArray::setRawData(const char *data, qsizetype size)

QByteArray重置为使用data数组的前size个字节。字节不会复制。QByteArray将包含data指针。调用者保证只要此QByteArray及其任何未修改的副本存在,data就不会被删除或修改。

此函数可以用作替代fromRawData(),以重用现有的QByteArray对象以节省内存重新分配。

另请参阅fromRawData(),data()和constData()。

void QByteArray::shrink_to_fit()

此函数提供以兼容STL。它与squeeze()等效。

QByteArray QByteArray::simplified() const

返回一个副本字节数组,移除开始和结束的空格字符以及将内部空格字符序列替换为单个空格。

空格字符是使标准C++ isspace() 函数返回true的ASCII字符;这些是制表符 '\t',换行 '\n',回车 '\r',垂直制表符 '\v',换页符 '\f'和空格 ' '。

示例

QByteArray ba("  lots\t of\nwhitespace\r\n ");
ba = ba.simplified();
// ba == "lots of whitespace";

另请参阅trimmed(),QChar::SpecialCharacterSpacing Characters

[noexcept] qsizetype QByteArray::size() const

返回此字节数组中的字节数。

字节数组的最后一个字节位于位置 size() - 1。此外,QByteArray 确保位置 size() 的字节始终是 '\0',这样您就可以将 data() 和 constData() 的返回值作为需要 '\0' 结尾的字符串的函数参数。如果 QByteArray 对象是从不包含尾随 '\0' 结尾字节的 原始数据 创建的,那么 QByteArray 不会自动添加它,除非创建了一个 深拷贝

示例

QByteArray ba("Hello");
qsizetype n = ba.size();    // n == 5
ba.data()[0];               // returns 'H'
ba.data()[4];               // returns 'o'
ba.data()[5];               // returns '\0'

另请参阅 isEmpty() 和 resize()。

QList<QByteArray> QByteArray::split(char sep) const

sep 出现的地方分割字节数组,并返回这些子数组的列表。如果字节数组中没有匹配的 sep,split() 将返回一个包含该字节数组的单元素列表。

void QByteArray::squeeze()

释放存储数组数据的任何不需要的内存。

此函数的唯一目的是为了提供一种微调QByteArray内存使用的方法。通常,你很少需要调用此函数。

另请参阅 reserve() 和 capacity()。

[since 6.0] bool QByteArray::startsWith(QByteArrayView bv) const

如果此字节数组以 bv 观察的字节序列开头,则返回 true;否则返回 false

示例

QByteArray url("ftp://ftp.qt-project.org/");
if (url.startsWith("ftp:"))
    ...

此函数是在 Qt 6.0 中引入的。

另请参阅 endsWith() 和 first()。

bool QByteArray::startsWith(char ch) const

这是一个重载函数。

如果此字节数组以字节 ch 开头,则返回 true;否则返回 false

[noexcept] void QByteArray::swap(QByteArray &other)

交换字节数组 other 与此字节数组。此操作非常快且从不失败。

QByteArray QByteArray::toBase64(QByteArray::Base64Options options = Base64Encoding) const

返回一个已使用 options 选项编码的字节数组的副本。

QByteArray text("Qt is great!");
text.toBase64();        // returns "UXQgaXMgZ3JlYXQh"

QByteArray text("<p>Hello?</p>");
text.toBase64(QByteArray::Base64Encoding | QByteArray::OmitTrailingEquals);      // returns "PHA+SGVsbG8/PC9wPg"
text.toBase64(QByteArray::Base64Encoding);                                       // returns "PHA+SGVsbG8/PC9wPg=="
text.toBase64(QByteArray::Base64UrlEncoding);                                    // returns "PHA-SGVsbG8_PC9wPg=="
text.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals);   // returns "PHA-SGVsbG8_PC9wPg"

用于编码 Base64 数据的算法在 RFC 4648 中定义。

另请参阅 fromBase64()。

CFDataRef QByteArray::toCFData() const

QByteArray 创建一个 CFData。

调用者拥有 CFData 对象,并负责释放它。

另请参阅 toRawCFData(),fromCFData(),fromRawCFData() 和 fromRawData()。

double QByteArray::toDouble(bool *ok = nullptr) const

返回将字节数组转换为 double 值。

如果转换溢出,则返回无穷大;如果因其他原因(例如下溢)转换失败,则返回0.0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

QByteArray string("1234.56");
bool ok;
double a = string.toDouble(&ok);   // a == 1234.56, ok == true

string = "1234.56 Volt";
a = str.toDouble(&ok);             // a == 0, ok == false

警告:QByteArray内容只能包含有效的数字字符,包括正负号、科学记数法中使用的字符e和小数点。包括单元或其他字符会导致转换错误。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

此函数忽略前导和尾随空白。

另请参阅number()。

[since 6.5] emscripten::val QByteArray::toEcmaUint8Array()

从QByteArray创建一个Uint8Array。

此函数将来自QByteArray的堆内存数据传输到JavaScript数据缓冲区。函数分配一个ArrayBuffer并将其复制进去,然后返回一个指向该缓冲区的Uint8Array视图。

JavaScript对象拥有数据的副本,此QByteArray可以在副本制作后被安全删除。

QByteArray byteArray = "test";
emscripten::val uint8array = QByteArray::toEcmaUint8Array(byteArray);

此函数是在Qt 6.5中引入的。

另请参阅toEcmaUint8Array()。

float QByteArray::toFloat(bool *ok = nullptr) const

返回转换为float值的字节数组。

如果转换溢出,则返回无穷大;如果因其他原因(例如下溢)转换失败,则返回0.0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

QByteArray string("1234.56");
bool ok;
float a = string.toFloat(&ok);    // a == 1234.56, ok == true

string = "1234.56 Volt";
a = str.toFloat(&ok);              // a == 0, ok == false

警告:QByteArray内容只能包含有效的数字字符,包括正负号、科学记数法中使用的字符e和小数点。包括单元或其他字符会导致转换错误。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

此函数忽略前导和尾随空白。

另请参阅number()。

QByteArray QByteArray::toHex(char separator = '\0') const

返回字节数组的十六进制编码副本。

十六进制编码使用数字0-9和字母a-f。

如果separator不是'\0',则在十六进制字节之间插入分隔符字符。

示例

QByteArray macAddress = QByteArray::fromHex("123456abcdef");
macAddress.toHex(':'); // returns "12:34:56:ab:cd:ef"
macAddress.toHex(0);   // returns "123456abcdef"

另请参阅fromHex()。

int QByteArray::toInt(bool *ok = nullptr, int base = 10) const

使用基数base将字节数组转换为int,默认为十进制。支持0和2至36的基数,使用字母表示超过9的数字;A为10,B为11,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

QByteArray str("FF");
bool ok;
int hex = str.toInt(&ok, 16);     // hex == 255, ok == true
int dec = str.toInt(&ok, 10);     // dec == 0, ok == false

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

long QByteArray::toLong(bool *ok = nullptr, int base = 10) const

使用基数base将字节数组转换为long int,默认为十进制。支持0和2至36的基数,使用字母表示超过9的数字;A为10,B为11,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

QByteArray str("FF");
bool ok;
long hex = str.toLong(&ok, 16);   // hex == 255, ok == true
long dec = str.toLong(&ok, 10);   // dec == 0, ok == false

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

qlonglong QByteArray::toLongLong(bool *ok = nullptr, int base = 10) const

使用默认为十进制的基础base将字节数组转换为长整型字节数组。支持的进制为0和2至36,使用字母表示9以上的数字;A代表十,B代表十一,依此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

QByteArray QByteArray::toLower() const

返回字节数组的副本,其中每个ASCII大写字母转换为小写。

示例

QByteArray x("Qt by THE QT COMPANY");
QByteArray y = x.toLower();
// y == "qt by the qt company"

另请参阅isLower(),toUpper()和Character Case

NSData *QByteArray::toNSData() const

QByteArray创建NSData。

NSData对象是自动释放的。

另请参阅fromNSData(),fromRawNSData(),fromRawData()和toRawNSData

QByteArray QByteArray::toPercentEncoding(const QByteArray &exclude = QByteArray(), const QByteArray &include = QByteArray(), char percent = '%') const

返回URI/URL风格的百分比编码的字节数组副本。当您想使用其他字符而不是默认的'%'字符时,可以使用percent参数来覆盖。

默认情况下,此函数会编码所有不属于以下字符的bytes

ALPHA ("a"到"z"和"A"到"Z") / DIGIT (0到9) / "-" / "." / "_" / "~")

要将bytes编码,请将其传递给include以阻止bytes编码,请将它们传递给exclude。百分号始终编码。

示例

QByteArray text = "{a fishy string?}";
QByteArray ba = text.toPercentEncoding("{}", "s");
qDebug("%s", ba.constData());
// prints "{a fi%73hy %73tring%3F}"

十六进制编码使用数字0-9和大写字母A-F。

另请参阅fromPercentEncoding()和QUrl::toPercentEncoding

CFDataRef QByteArray::toRawCFData() const

使用QByteArray的bytes构建CFData。

不会复制QByteArray的bytes。

调用者保证在CFData对象存在期间,QByteArray不会被删除或修改。

另请参阅toCFData(),fromRawCFData(),fromCFData()和fromRawData

NSData *QByteArray::toRawNSData() const

使用QByteArray的bytes构建NSData。

不会复制QByteArray的bytes。

调用者保证,在NSData对象存在期间,将不会删除或修改QByteArray

另请参阅fromRawNSData(),fromNSData(),fromRawData()和toNSData

short QByteArray::toShort(bool *ok = nullptr, int base = 10) const

返回使用基础base转换为的字节码数组,默认为十进制。支持0和2至36进制,使用字母表示大于9的数字;A代表十,B代表十一,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

std::string QByteArray::toStdString() const

返回包含在此QByteArray中的数据的std::string对象。

此运算符主要用于将QByteArray传递给接受std::string对象的函数。

另请参阅fromStdString()和QString::toStdString

uint QByteArray::toUInt(bool *ok = nullptr, int base = 10) const

返回使用基础base转换为的字节码数组的无符号整数,默认为十进制。支持0和2至36进制,使用字母表示大于9的数字;A代表十,B代表十一,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

ulong QByteArray::toULong(bool *ok = nullptr, int base = 10) const

返回使用基础base转换为的字节码数组的无符号长整数的无符号长整数,默认为十进制。支持0和2至36进制,使用字母表示大于9的数字;A代表十,B代表十一,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

qulonglong QByteArray::toULongLong(bool *ok = nullptr, int base = 10) const

返回使用基础base转换为的字节码数组的无符号长长整数的无符号长长整数,默认为十进制。支持0和2至36进制,使用字母表示大于9的数字;A代表十,B代表十一,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

ushort QByteArray::toUShort(bool *ok = nullptr, int base = 10) const

返回使用基础base转换为的字节码数组的无符号短整数的无符号短整数,默认为十进制。支持0和2至36进制,使用字母表示大于9的数字;A代表十,B代表十一,以此类推。

如果base是0,则根据以下规则自动确定基数:如果字节数组以"0x"开头,则假定它是十六进制(基数16);否则,如果以"0b"开头,则假定它是二进制(基数2);否则,如果以"0"开头,则假定它是八进制(基数8);否则假定它是十进制。

如果转换失败,则返回0。

如果 ok 不是 nullptr,则通过将 *ok 设置为 false 来报告失败,并通过将 *ok 设置为 true 来报告成功。

注意:数字的转换是在默认的C区域设置中执行的,不受用户区域设置的影响。使用QLocale在不同区域设置的数字和字符串之间进行本地化转换。

注意:对"0b"前缀的支持是在Qt 6.4中添加的。

另请参阅number()。

QByteArray QByteArray::toUpper() const

返回一个副本字节码数组,其中每个ASCII小写字母都转换为大写字母。

示例

QByteArray x("Qt by THE QT COMPANY");
QByteArray y = x.toUpper();
// y == "QT BY THE QT COMPANY"

另请参阅isUpper(),toLower()和字符大小写

QByteArray QByteArray::trimmed() const

返回一个副本字节码数组,从开始和结束处删除空格字符。

空格字符是使标准C++ isspace() 函数返回true的ASCII字符;这些是制表符 '\t',换行 '\n',回车 '\r',垂直制表符 '\v',换页符 '\f'和空格 ' '。

示例

QByteArray ba("  lots\t of\nwhitespace\r\n ");
ba = ba.trimmed();
// ba == "lots\t of\nwhitespace";

简化不同,trimmed()保留内部空格不变。

另请参阅简化QChar::SpecialCharacter空格字符

void QByteArray::truncate(qsizetype pos)

在指定位置索引截断字节数组。

如果 pos 超出了数组的末尾,则不执行任何操作。

示例

QByteArray ba("Stockholm");
ba.truncate(5);             // ba == "Stock"

参见chop(),resize() 和 first()。

bool QByteArray::operator!=(const QString &str) const

如果此字节数组不等于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

QByteArray &QByteArray::operator+=(const QByteArray &ba)

将字节数组 ba 添加到该字节数组的末尾,并返回对该字节数组的引用。

示例

QByteArray x("free");
QByteArray y("dom");
x += y;
// x == "freedom"

注意:QByteArray 是一个 隐式共享 的类。因此,如果是向一个空的字节数组追加内容,该字节数组将仅共享 ba 中的数据。在这种情况下,不执行数据复制,耗时 恒定时间。如果共享实例被修改,它将被复制(写时复制),耗时 线性时间

如果追加的字节数组不为空,则会执行数据的深复制,耗时 线性时间

此操作通常不会遭受分配开销,因为 QByteArray 在数据末尾预分配额外的空间,以便在每次附加操作时不重新分配即可增长。

参见append() 和 prepend()。

QByteArray &QByteArray::operator+=(char ch)

这是一个重载函数。

将字节数组 ch 添加到该字节数组的末尾,并返回对该字节数组的引用。

QByteArray &QByteArray::operator+=(const char *str)

这是一个重载函数。

将以 '\0' 结尾的字符串 str 添加到该字节数组的末尾,并返回对该字节数组的引用。

bool QByteArray::operator<(const QString &str) const

如果此字节数组在字典序上小于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

bool QByteArray::operator<=(const QString &str) const

如果此字节数组在字典序上小于或等于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

[noexcept] QByteArray &QByteArray::operator=(const QByteArray &other)

other 分配给该字节数组,并返回对该字节数组的引用。

QByteArray &QByteArray::operator=(const char *str)

这是一个重载函数。

str 分配给该字节数组。

str 假设指向一个空终止的字符串,其长度是动态确定的。

[noexcept] QByteArray &QByteArray::operator=(QByteArray &&other)

other 移动分配给此 QByteArray 实例。

bool QByteArray::operator==(const QString &str) const

如果此字节数组等于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

bool QByteArray::operator>(const QString &str) const

如果此字节数组在词法上大于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

bool QByteArray::operator>=(const QString &str) const

如果此字节数组大于或等于 str 的 UTF-8 编码,则返回 true;否则返回 false

比较区分大小写。

您可以通过在编译应用程序时定义 QT_NO_CAST_FROM_ASCII 来禁用此操作符。然后,如果您想在比较之前将字节数组转换为 QString,则需要显式调用 QString::fromUtf8QString::fromLatin1QString::fromLocal8Bit()。

char &QByteArray::operator[](qsizetype i)

返回位于索引位置 i 的字节的可修改引用。

i必须是字节数组中的有效索引位置(即,0 <= i < size()).

示例

QByteArray ba("Hello, world");
cout << ba[0]; // prints H
ba[7] = 'W';
// ba == "Hello, World"

另请参阅at().

char QByteArray::operator[](qsizetype i) const

这是一个重载函数。

与 at(i) 相同。

相关非成员函数

[since 6.1] 模板 <typename T> qsizetype erase(QByteArray &ba, const T &t)

从字节数组 ba 中删除所有与 t 比较相等的元素。如果有元素被删除,返回删除的元素数量。

此函数是在Qt 6.1中引入的。

另请参阅erase_if.

[since 6.1] 模板 <typename Predicate> qsizetype erase_if(QByteArray &ba, Predicate pred)

从字节数组 ba 中删除所有使得谓词 pred 返回 true 的元素。如果有元素被删除,返回删除的元素数量。

此函数是在Qt 6.1中引入的。

另请参阅erase.

quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309)

返回 data 的 CRC-16 校验和。

校验和不受字节序影响(端序性),并按照在 standard 中发布的算法进行计算。默认情况下,使用 ISO 3309 中发布的算法(Qt::ChecksumIso3309)。

注意:此函数是 16 位缓存节省(16 个条目表)CRC-16-CCITT 算法的实现。

QByteArray qCompress(const QByteArray &data, int compressionLevel = -1)

压缩字节数组 data 并返回包含压缩数据的新的字节数组。

compressionLevel参数指定应该使用多少压缩。有效值介于0到9之间,9对应于最大压缩(即更小的压缩数据),但代价是使用更慢的算法。较小的值(8,7,……,1)提供逐级降低的压缩率,同时速度略有提升。值0表示完全不压缩。默认值是-1,它指定了zlib的默认压缩。

另见 qUncompress(const QByteArray &data)。

QByteArray qCompress(const uchar *data, qsizetype nbytes, int compressionLevel = -1)

这是一个重载函数。

在压缩等级compressionLevel下压缩data的前nbytes,并在新的字节数组中返回压缩后的数据。

QByteArray qUncompress(const QByteArray &data)

解压缩data字节数组,并返回一个新的字节数组,其中包含解压缩后的数据。

如果输入数据损坏,则返回一个空的QByteArray

此函数将从这个和任何早期版本(回溯至Qt 3.1,当时添加此功能时)的qCompress()压缩的数据解压缩。

注意:如果您想使用此函数来解压缩使用zlib压缩的外部数据,您需要首先向包含数据的字节数组的前面预置一个四个字节的头。该头必须包含未压缩数据的预期长度(以字节为单位),这是一个大端无符号32位整数。这个数字只是一个输出缓冲区初始大小的提示。如果指示的大小不足以容纳结果,输出缓冲区的大小仍然会增加到输出适合为止或者系统耗尽内存。因此,尽管有32位头,但此函数在64位平台上可以产生超过4GiB的输出。

注意:在Qt 6.5之前的版本中,超过2GiB的数据工作不可靠;在Qt 6.0之前的版本中,根本没有工作。

另见 qCompress()。

QByteArray qUncompress(const uchar *data, qsizetype nbytes)

这是一个重载函数。

解压缩data的前nbytes,并返回一个新的字节数组,其中包含解压缩后的数据。

int qsnprintf(char *str, size_t n, const char *fmt, ...)

一个可移植的snprintf()函数,调用qvsnprintf。

fmtprintf()格式字符串。结果存储在至少n个字节的缓冲区str中。

警告:只有在您清楚自己在做什么的情况下才调用此函数,因为它在特定平台上显示不同的行为。请使用QString::asprintf()来格式化字符串。

另见 qvsnprintf() 和 QString::asprintf

int qstrcmp(const char *str1, const char *str2)

一个安全的 strcmp() 函数。

比较 str1str2。如果 str1 小于 str2,则返回负值;如果 str1 等于 str2,则返回 0;如果 str1 大于 str2,则返回正值。

如果两个字符串都为 nullptr,则认为它们相等;否则,如果其中任何一个为 nullptr,则它被视为小于另一个(即使另一个是空字符串)。

另请参阅:qstrncmp(),qstricmp(),qstrnicmp(),字符大小写QByteArray::compare

char *qstrcpy(char *dst, const char *src)

将从 src 中包括 '\0' 在内的所有字符复制到 dst 中,并返回对 dst 的指针。如果 srcnullptr,则立即返回 nullptr

该函数假定 dst 有足够的空间容纳 src 的内容。

注意:如果 dstsrc 交叉,行为将是未定义的。

另请参阅:qstrncpy

char *qstrdup(const char *src)

返回一个重复的字符串。

src 的副本分配空间,将其复制,并返回对副本的指针。如果 srcnullptr,则立即返回 nullptr

所有权传递给调用者,因此必须使用 delete[] 删除返回的字符串。

int qstricmp(const char *str1, const char *str2)

一个安全的 stricmp() 函数。

比较 str1str2,忽略任何 ASCII 字符的大小写差异。

如果 str1 小于 str2,则返回负值;如果 str1 等于 str2,则返回 0;如果 str1 大于 str2,则返回正值。

如果两个字符串都为 nullptr,则认为它们相等;否则,如果其中任何一个为 nullptr,则它被视为小于另一个(即使另一个是空字符串)。

另请参阅:qstrcmp(),qstrncmp(),qstrnicmp(),字符大小写QByteArray::compare

size_t qstrlen(const char *str)

一个安全的 strlen() 函数。

返回终止 '\0' 前的字符数,或者如果 strnullptr,则返回 0。

另请参阅:qstrnlen

int qstrncmp(const char *str1, const char *str2, size_t len)

一个安全的 strncmp() 函数。

比较 str1str2 的最多 len 个字节。

如果 str1 小于 str2,则返回负值;如果 str1 等于 str2,则返回 0;如果 str1 大于 str2,则返回正值。

如果两个字符串都是 nullptr,则认为它们相等;否则,如果其中一个字符串是 nullptr,则认为它小于另一个字符串(即使另一个字符串为空字符串或 len 为 0)。

另请参阅qstrcmp(),qstricmp(),qstrnicmp(),字符大小写QByteArray::compare()。

char *qstrncpy(char *dst,const char *srcsize_t len)

一个安全的 strncpy() 函数。

最多复制 len 个字节从 src(在 len 或终止字符 '\0' 到来先时停止)到 dst 中。确保 dst 是 '\0' 终止的,除非 dstnullptrlen 为 0。如果 srcnullptr,则返回 nullptr,否则返回 dst

此函数假设 dst 至少有 len 个字符长。

注意:如果 dstsrc 交叉,行为将是未定义的。

注意:与 strncpy() 不同,此函数不具备将所有 len 个字节写入 dst 的 '\0',而是在遇到终止字符 '\0' 时停止。从这个意义上讲,它与 C11 的 strncpy_s() 类似。

另请参阅qstrcpy()。

int qstrnicmp(const char *str1,const char *str2size_t len)

一个安全的 strnicmp() 函数。

比较最多 len 个字节 str1str2,忽略任何 ASCII 字符在大小写上的差异。

如果 str1 小于 str2,则返回负值;如果 str1 等于 str2,则返回 0;如果 str1 大于 str2,则返回正值。

如果两个字符串都是 nullptr,则认为它们相等;否则,如果其中一个字符串是 nullptr,则认为它小于另一个字符串(即使另一个字符串为空字符串或 len 为 0)。

另请参阅qstrcmp(),qstrncmp(),qstricmp(),字符大小写QByteArray::compare()。

size_t qstrnlen(const char *strsize_t maxlen)

一个安全的 strnlen() 函数。

返回在终止字符 '\0' 之前 precede 的字符数,但不大于 maxlen。如果 strnullptr,则返回 0。

另请参阅qstrlen()。

int qvsnprintf(char *strsize_t n,const char *fmtva_list ap)

一个可移植的 vsnprintf() 函数。根据系统调用 ::vsnprintf()::_vsnprintf()::vsnprintf_s,或者回退到内部版本。

fmtprintf()格式字符串。结果存储在至少n个字节的缓冲区str中。

调用者负责在 ap 上调用 va_end()

警告:由于 vsnprintf() 在某些平台上显示不同的行为,您不应依赖返回值或您将始终获得以 '\0' 结尾的字符串这一事实。

理想情况下,您应该永远不调用此函数,而应使用 QString::asprintf()。

另请参阅qsnprintf() 和 QString::asprintf()。

[noexcept] bool operator!=(const QByteArray &a1,const QByteArray &a2)

这是一个重载函数。

如果字节数组 a1 不等于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator!=(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节数组 a1 不等于由 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator!=(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果 '\0' 结尾的字符串 a1 不等于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept, since 6.4] QByteArray operator""_ba(const char *str, size_t size)

这是创建由字符字符串字面量 str 的前 size 个字符组成的 QByteArray 的字面量操作符。

QByteArray 在编译时创建,生成的字符串数据存储在编译对象文件的只读段中。重复的字面量可以共享相同的只读内存。此功能可以与 QByteArrayLiteral 互换,但在代码中存在许多字符串字面量时可以节省输入。

以下代码创建一个 QByteArray

using namespace Qt::Literals::StringLiterals;

auto str = "hello"_ba;

此函数自 Qt 6.4 开始引入。

另请参阅 Qt::Literals::StringLiterals

QByteArray operator+(const QByteArray &a1, const QByteArray &a2)

返回由字节数组 a1 和字节数组 a2 连接而成的字节数组。

另请参阅 QByteArray::operator+=

QByteArray operator+(const QByteArray &a1, const char *a2)

这是一个重载函数。

返回由字节数组 a1 和 '\0' 结尾的字符串 a2 连接而成的字节数组。

QByteArray operator+(const QByteArray &a1, char a2)

这是一个重载函数。

返回由字节数组 a1 和字节 a2 连接而成的字节数组。

QByteArray operator+(const char *a1, const QByteArray &a2)

这是一个重载函数。

返回由 '\0' 结尾的字符串 a1 和字节数组 a2 连接而成的字节数组。

QByteArray operator+(char a1, const QByteArray &a2)

这是一个重载函数。

返回由字节 a1 和字节数组 a2 连接而成的字节数组。

[noexcept] bool operator<(const QByteArray &a1, const QByteArray &a2)

这是一个重载函数。

如果字节序列 a1 在词法上小于字节序列 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator<(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节序列 a1 在词法上小于以 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator<(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果以 '\0' 结尾的字符串 a1 在词法上小于字节序列 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

QDataStream &operator<<(QDataStream &out, const QByteArray &ba)

将字节序列 ba 写入流 out 并返回对流的引用。

另请参阅 序列化 Qt 数据类型

[noexcept] bool operator<=(const QByteArray &a1, const QByteArray &a2)

这是一个重载函数。

如果字节序列 a1 在词法上小于或等于字节序列 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator<=(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节序列 a1 在词法上小于或等于以 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator<=(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果以 '\0' 结尾的字符串 a1 在词法上小于或等于字节序列 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const QByteArray &a1, const QByteArray &a2)

这是一个重载函数。

如果字节序列 a1 等于字节序列 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节数组 a1 等于以 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果以 '\0' 结尾的字符串 a1 等于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const QByteArray &a1, const QByteArray &a2)

这是一个重载函数。

如果字节数组 a1 在词法上大于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节数组 a1 在词法上大于以 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果以 '\0' 结尾的字符串 a1 在词法上大于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const QByteArray &a1, const QByteArray &a2)

这是一个重载函数。

如果字节数组 a1 在词法上大于或等于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const QByteArray &a1, const char *a2)

这是一个重载函数。

如果字节数组 a1 在词法上大于或等于以 '\0' 结尾的字符串 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const char *a1, const QByteArray &a2)

这是一个重载函数。

如果以 '\0' 结尾的字符串 a1 在词法上大于或等于字节数组 a2,则返回 true;否则返回 false

另请参阅 QByteArray::compare()。

QDataStream &operator>>(QDataStream &in, QByteArray &ba)

从流 in 中读取字节数组到 ba,并返回流的一个引用。

另请参阅 序列化 Qt 数据类型

宏文档

QByteArrayLiteral(ba)

该宏在编译时生成从字符串字面量 ba 出来的 QByteArray 数据。在这种情况下,从其中创建 QByteArray 是免费的,生成的字节数据存储在编译的对象文件的只读段。

例如

QByteArray ba = QByteArrayLiteral("byte array contents");

使用 QByteArrayLiteral 而不是双引号的普通 C++ 字符串字面量可以显著加快从编译时已知的数据库创建 QByteArray 实例的速度。

另请参阅 QStringLiteral

QT_NO_CAST_FROM_BYTEARRAY

禁用从 QByteArray 到 const char * 或 const void * 的自动转换。

另请参阅 QT_NO_CAST_TO_ASCIIQT_NO_CAST_FROM_ASCII

© 2024 The Qt Company Ltd. 其中包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款授予的。Qt 及其相应商标是 The Qt Company Ltd. 在芬兰和/或世界其他国家的商标。所有其他商标均为其各自所有者的财产。