本页内容

QByteArray Class

QByteArray 类提供了一个字节数组。更多内容...

头文件: #include <QByteArray>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注意:该类中的所有函数均为可重入的。

QByteArray 比较

类别可比较类型描述
strongQByteArray
strongconst char *.
strongQChar、char16_t、QString 、QStringView 、QLatin1StringView 和QUtf8StringView 。与字符串类型进行比较时,其内容将被解释为 UTF-8。

公共类型

class FromBase64Result
enum Base64Option { Base64Encoding, Base64UrlEncoding, KeepTrailingEquals, OmitTrailingEquals, IgnoreBase64DecodingErrors, AbortOnBase64DecodingErrors }
flags Base64Options
const_iterator
const_reverse_iterator
iterator
reverse_iterator

公共函数

QByteArray()
(since 6.8) QByteArray(QByteArrayViewv)
QByteArray(const char*data, qsizetypesize= -1)
QByteArray(qsizetypesize, Qt::Initialization)
QByteArray(qsizetypesize, charch)
QByteArray(const QByteArray&other)
QByteArray(QByteArray&&other)
~QByteArray()
QByteArray &append(const QByteArray&ba)
QByteArray &append(QByteArrayViewdata)
QByteArray &append(charch)
QByteArray &append(const char*str)
QByteArray &append(const char*str, qsizetypelen)
QByteArray &append(qsizetypecount, charch)
(since 6.6) QByteArray &assign(QByteArrayViewv)
(since 6.6) QByteArray &assign(InputIteratorfirst, InputIteratorlast)
(since 6.6) QByteArray &assign(qsizetypen, charc)
char at(qsizetypei) const
char &back()
char back() const
QByteArray::iterator begin()
QByteArray::const_iterator begin() const
qsizetype capacity() const
QByteArray::const_iterator cbegin() const
QByteArray::const_iterator cend() const
void chop(qsizetypen)
QByteArray chopped(qsizetypelen) &&
QByteArray chopped(qsizetypelen) const &
void clear()
(since 6.0) int compare(QByteArrayViewbv, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QByteArray::const_iterator constBegin() const
const char *constData() const
QByteArray::const_iterator constEnd() const
(since 6.0) bool contains(QByteArrayViewbv) const
bool contains(charch) const
(since 6.0) qsizetype count(QByteArrayViewbv) const
qsizetype count(charch) const
QByteArray::const_reverse_iterator crbegin() const
QByteArray::const_reverse_iterator crend() const
char *data()
const char *data() const
QByteArray::iterator end()
QByteArray::const_iterator end() const
(since 6.0) bool endsWith(QByteArrayViewbv) const
bool endsWith(charch) const
(since 6.1) QByteArray::iterator erase(QByteArray::const_iteratorfirst, QByteArray::const_iteratorlast)
(since 6.5) QByteArray::iterator erase(QByteArray::const_iteratorit)
QByteArray &fill(charch, qsizetypesize= -1)
(since 6.0) QByteArray first(qsizetypen) &&
(since 6.0) QByteArray first(qsizetypen) const &
char &front()
char front() const
(since 6.0) qsizetype indexOf(QByteArrayViewbv, qsizetypefrom= 0) const
qsizetype indexOf(charch, qsizetypefrom= 0) const
(since 6.0) QByteArray &insert(qsizetypei, QByteArrayViewdata)
QByteArray &insert(qsizetypei, const QByteArray&data)
QByteArray &insert(qsizetypei, const char*s)
QByteArray &insert(qsizetypei, charch)
QByteArray &insert(qsizetypei, const char*data, qsizetypelen)
QByteArray &insert(qsizetypei, qsizetypecount, charch)
bool isEmpty() const
bool isLower() const
bool isNull() const
bool isUpper() const
(since 6.3) bool isValidUtf8() const
(since 6.0) QByteArray last(qsizetypen) &&
(since 6.0) QByteArray last(qsizetypen) const &
(since 6.0) qsizetype lastIndexOf(QByteArrayViewbv, qsizetypefrom) const
(since 6.2) qsizetype lastIndexOf(QByteArrayViewbv) const
qsizetype lastIndexOf(charch, qsizetypefrom= -1) const
QByteArray left(qsizetypelen) &&
QByteArray left(qsizetypelen) const &
QByteArray leftJustified(qsizetypewidth, charfill= ' ', booltruncate= false) const
qsizetype length() const
(since 6.8) qsizetype max_size() const
QByteArray mid(qsizetypepos, qsizetypelen= -1) &&
QByteArray mid(qsizetypepos, qsizetypelen= -1) const &
(since 6.10) QByteArray &nullTerminate()
(since 6.10) QByteArray nullTerminated() &&
(since 6.10) QByteArray nullTerminated() const &
(since 6.4) QByteArray percentDecoded(charpercent= '%') const &
(since 6.11) QByteArray percentDecoded(charpercent= '%') &&
QByteArray &prepend(QByteArrayViewba)
QByteArray &prepend(charch)
QByteArray &prepend(const QByteArray&ba)
QByteArray &prepend(const char*str)
QByteArray &prepend(const char*str, qsizetypelen)
QByteArray &prepend(qsizetypecount, charch)
void push_back(const QByteArray&other)
(since 6.0) void push_back(QByteArrayViewstr)
void push_back(charch)
void push_back(const char*str)
void push_front(const QByteArray&other)
(since 6.0) void push_front(QByteArrayViewstr)
void push_front(charch)
void push_front(const char*str)
QByteArray::reverse_iterator rbegin()
QByteArray::const_reverse_iterator rbegin() const
QByteArray &remove(qsizetypepos, qsizetypelen)
(since 6.5) QByteArray &removeAt(qsizetypepos)
(since 6.5) QByteArray &removeFirst()
(since 6.1) QByteArray &removeIf(谓词pred)
(since 6.5) QByteArray &removeLast()
QByteArray::reverse_iterator rend()
QByteArray::const_reverse_iterator rend() const
QByteArray repeated(qsizetypetimes) const
QByteArray &replace(qsizetypepos, qsizetypelen, QByteArrayViewafter)
(since 6.0) QByteArray &replace(QByteArrayViewbefore, QByteArrayViewafter)
QByteArray &replace(charbefore, QByteArrayViewafter)
QByteArray &replace(char之前, char之后)
QByteArray &replace(const char*before, qsizetypebsize, const char*after, qsizetypeasize)
QByteArray &replace(qsizetypepos, qsizetypelen, const char*after, qsizetypealen)
void reserve(qsizetypesize)
void resize(qsizetypesize)
(since 6.4) void resize(qsizetypenewSize, charc)
(since 6.8) void resizeForOverwrite(qsizetypesize)
QByteArray right(qsizetypelen) &&
QByteArray right(qsizetypelen) const &
QByteArray rightJustified(qsizetypewidth, charfill= ' ', booltruncate= false) const
QByteArray &setNum(intn, intbase= 10)
QByteArray &setNum(longn, intbase= 10)
QByteArray &setNum(qlonglongn, intbase= 10)
QByteArray &setNum(qulonglongn, intbase= 10)
QByteArray &setNum(shortn, intbase= 10)
QByteArray &setNum(uintn, intbase= 10)
QByteArray &setNum(ulongn, intbase= 10)
QByteArray &setNum(ushortn, intbase= 10)
QByteArray &setNum(doublen, charformat= 'g', intprecision= 6)
QByteArray &setNum(floatn, charformat= 'g', intprecision= 6)
QByteArray &setRawData(const char*data, qsizetypesize)
void shrink_to_fit()
QByteArray simplified() const
qsizetype size() const
(since 6.8) QByteArray &slice(qsizetypepos, qsizetypen)
(since 6.8) QByteArray &slice(qsizetypepos)
(since 6.0) QByteArray sliced(qsizetypepos, qsizetypen) &&
(since 6.0) QByteArray sliced(qsizetypepos, qsizetypen) const &
(since 6.0) QByteArray sliced(qsizetypepos) &&
(since 6.0) QByteArray sliced(qsizetypepos) const &
QList<QByteArray> split(charsep) const
void squeeze()
(since 6.0) bool startsWith(QByteArrayViewbv) const
bool startsWith(charch) const
void swap(QByteArray&other)
QByteArray toBase64(QByteArray::Base64Optionsoptions= Base64Encoding) const
CFDataRef toCFData() const
double toDouble(bool*ok= nullptr) const
(since 6.5) emscripten::val toEcmaUint8Array()
float toFloat(bool*ok= nullptr) const
QByteArray toHex(charseparator= '\0') const
int toInt(bool*ok= nullptr, intbase= 10) const
long toLong(bool*ok= nullptr, intbase= 10) const
qlonglong toLongLong(bool*ok= nullptr, intbase= 10) const
QByteArray toLower() const
NSData *toNSData() const
QByteArray toPercentEncoding(const QByteArray&exclude= QByteArray(), const QByteArray&include= QByteArray(), charpercent= '%') const
CFDataRef toRawCFData() const
NSData *toRawNSData() const
short toShort(bool*ok= nullptr, intbase= 10) const
std::string toStdString() const
uint toUInt(bool*ok= nullptr, intbase= 10) const
ulong toULong(bool*ok= nullptr, intbase= 10) const
qulonglong toULongLong(bool*ok= nullptr, intbase= 10) const
ushort toUShort(bool*ok= nullptr, intbase= 10) const
QByteArray toUpper() const
QByteArray trimmed() const
void truncate(qsizetypepos)
operator const char *() const
operator const void *() const
(since 6.10) operator std::string_view() const
QByteArray &operator+=(const QByteArray&ba)
QByteArray &operator+=(charch)
QByteArray &operator+=(const char*str)
QByteArray &operator=(QByteArray&&other)
QByteArray &operator=(const QByteArray&other)
QByteArray &operator=(const char*str)
char &operator[](qsizetypei)
char operator[](qsizetypei) const

静态公共成员

QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)
QByteArray::FromBase64Result fromBase64Encoding(QByteArray &&base64, QByteArray::Base64Options options = Base64Encoding)
QByteArray::FromBase64Result fromBase64Encoding(const QByteArray &base64, QByteArray::Base64Options options = Base64Encoding)
QByteArray fromCFData(CFDataRef data)
(since 6.5) QByteArray fromEcmaUint8Array(emscripten::val uint8array)
QByteArray fromHex(const QByteArray &hexEncoded)
QByteArray fromNSData(const NSData *data)
QByteArray fromPercentEncoding(const QByteArray &input, char percent = '%')
(since 6.11) QByteArray fromPercentEncoding(QByteArray &&input, char percent = '%')
QByteArray fromRawCFData(CFDataRef data)
QByteArray fromRawData(const char *data, qsizetype size)
QByteArray fromRawNSData(const NSData *data)
QByteArray fromStdString(const std::string &str)
(since 6.8) qsizetype maxSize()
QByteArray number(int n, int base = 10)
QByteArray number(long n, int base = 10)
QByteArray number(qlonglong n, int base = 10)
QByteArray number(qulonglong n, int base = 10)
QByteArray number(uint n, int base = 10)
QByteArray number(ulong n, int base = 10)
QByteArray number(double n, char format = 'g', int precision = 6)
(since 6.1) qsizetype erase(QByteArray &ba, const T &t)
(since 6.1) qsizetype erase_if(QByteArray &ba, Predicate pred)
quint16 qChecksum(QByteArrayView data, Qt::ChecksumType standard = Qt::ChecksumIso3309)
QByteArray qCompress(const QByteArray &data, int compressionLevel = -1)
QByteArray qCompress(const uchar *data, qsizetype nbytes, int compressionLevel = -1)
QByteArray qUncompress(const QByteArray &data)
QByteArray qUncompress(const uchar *data, qsizetype nbytes)
int qstrcmp(const char *str1, const char *str2)
char *qstrcpy(char *dst, const char *src)
char *qstrdup(const char *src)
int qstricmp(const char *str1, const char *str2)
size_t qstrlen(const char *str)
int qstrncmp(const char *str1, const char *str2, size_t len)
char *qstrncpy(char *dst, const char *src, size_t len)
int qstrnicmp(const char *s1, const char *s2, size_t len)
size_t qstrnlen(const char *str, size_t maxlen)
bool operator!=(const QByteArray &lhs, const QByteArray &rhs)
bool operator!=(const QByteArray &lhs, const char *const &rhs)
bool operator!=(const char *const &lhs, const QByteArray &rhs)
(since 6.4) QByteArray operator""_ba(const char *str, size_t size)
QByteArray operator+(const QByteArray &a1, const QByteArray &a2)
(since 6.9) QByteArray operator+(QByteArrayView lhs, const QByteArray &rhs)
QByteArray operator+(char a1, const QByteArray &a2)
(since 6.9) QByteArray operator+(const QByteArray &lhs, QByteArrayView rhs)
QByteArray operator+(const QByteArray &a1, char a2)
QByteArray operator+(const QByteArray &a1, const char *a2)
QByteArray operator+(const char *a1, const QByteArray &a2)
bool operator<(const QByteArray &lhs, const QByteArray &rhs)
bool operator<(const QByteArray &lhs, const char *const &rhs)
bool operator<(const char *const &lhs, const QByteArray &rhs)
QDataStream &operator<<(QDataStream &out, const QByteArray &ba)
bool operator<=(const QByteArray &lhs, const QByteArray &rhs)
bool operator<=(const QByteArray &lhs, const char *const &rhs)
bool operator<=(const char *const &lhs, const QByteArray &rhs)
bool operator==(const QByteArray &lhs, const QByteArray &rhs)
bool operator==(const QByteArray &lhs, const char *const &rhs)
bool operator==(const char *const &lhs, const QByteArray &rhs)
bool operator>(const QByteArray &lhs, const QByteArray &rhs)
bool operator>(const QByteArray &lhs, const char *const &rhs)
bool operator>(const char *const &lhs, const QByteArray &rhs)
bool operator>=(const QByteArray &lhs, const QByteArray &rhs)
bool operator>=(const QByteArray &lhs, const char *const &rhs)
bool operator>=(const char *const &lhs, const QByteArray &rhs)
QDataStream &operator>>(QDataStream &in, QByteArray &ba)

宏

详细说明

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

除了 QByteArray 之外,Qt 还提供了QString 类来存储字符串数据。 在大多数情况下,QString 是您应该使用的类。它将内容视为Unicode文本(使用UTF-16编码),而QByteArray则旨在避免对所存储字节的编码或语义做出任何假设(除了少数使用ASCII的遗留情况)。 此外,QString 在整个Qt API中被广泛使用。QByteArray适用的主要场景有两种:一是需要存储原始二进制数据时,二是内存节省至关重要时(例如在Qt for Embedded Linux中)。

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

QByteArray ba("Hello");

尽管size()的值为5,但字节数组在末尾还会保留一个额外的'\0'字节,这样当调用需要底层数据指针的函数(例如调用data())时,所指向的数据就保证是以'\0'结尾的。

QByteArray 会对const char * 数据进行深度复制,因此您稍后可以修改它而不会产生副作用。(例如,如果出于性能考虑,您不想对数据进行深度复制,请改用QByteArray::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() 可能比 [] 运算符更快,因为它永远不会引发深度复制。

若需一次性提取多个字节,请使用first()、last 或sliced 。

一个 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()。这些函数返回指向数据起始处的指针。 该指针在对 QByteArray 调用非 const 函数之前,保证始终有效。此外,除非 QByteArray 是通过raw data 创建的,否则保证数据以 '\0' 字节结尾。该 '\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_iterator 和QByteArray::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>=() 等)对 QByteArray 进行比较。这种比较完全基于字节的数值,速度非常快,但结果可能与人类的预期不符。对于排序用户界面字符串,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 支持,其他编码可通过QStringEncoder 和QStringDecoder 转换为 Unicode 来实现支持。若需对文本进行特定语言环境的解释,请使用QLocale 或QString 。

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 表示字符。

另请参阅 QByteArrayView 、QString 和QBitArray 。

成员类型文档

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> 的 typedef 定义。它存储 Base64Option 值的按“或”运算组合。

QByteArray::const_iterator

此 typedef 为 `QByteArray` 提供了一个 STL 风格的 const 迭代器。

另请参阅 QByteArray::const_reverse_iterator 和QByteArray::iterator 。

QByteArray::const_reverse_iterator

此 typedef 为 `QByteArray` 提供了一个 STL 风格的 const 反向迭代器。

另请参阅 QByteArray::reverse_iterator 和QByteArray::const_iterator 。

QByteArray::iterator

此 typedef 为 `QByteArray` 提供了一个 STL 风格的非 const 迭代器。

另请参阅 QByteArray::reverse_iterator 和QByteArray::const_iterator 。

QByteArray::reverse_iterator

此 typedef 为QByteArray 提供了一个 STL 风格的非 const 反向迭代器。

另请参阅 QByteArray::const_reverse_iterator 和QByteArray::iterator 。

成员函数文档

[constexpr noexcept] QByteArray::QByteArray()

构建一个空字节数组。

另请参阅 isEmpty()。

[explicit, since 6.8] QByteArray::QByteArray(QByteArrayView v)

构建一个用字节数组视图的数据初始化的字节数组。

当且仅当 `v ` 为空时,`QByteArray` 才会为空。

该函数在 Qt 6.8 中引入。

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

构建一个字节数组,其中包含数组data 的前size 个字节。

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

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

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

另请参阅 fromRawData()。

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

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

例如:

QByteArray buffer(123, Qt::Uninitialized);

QByteArray::QByteArray(qsizetype size, char ch)

构建一个大小为size 的字节数组,其中每个字节均设置为ch 。

另请参阅 fill()。

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

构建other 的副本。

此操作耗时为常数时间,因为 QByteArray 是隐式共享的。这使得从函数中返回一个 QByteArray 非常快。如果修改了共享的实例,则会进行复制(写时复制),耗时为线性时间。

另请参阅 operator=()。

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

通过“move”操作构造一个 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 会在数据末尾预先分配额外的空间,因此可以在无需每次重新分配整个数组的情况下进行扩展。

另请参阅 operator+=()、prepend() 和insert()。

QByteArray &QByteArray::append(QByteArrayView data)

将data 追加到该字节数组中。

这是一个重载函数。

QByteArray &QByteArray::append(char ch)

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

这是一个重载函数。

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(qsizetype count, char ch)

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

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

这是一个重载函数。

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

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

该字节数组的大小将等于 `v` 的大小。

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

该函数于 Qt 6.6 中引入。

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

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

该字节数组的大小将等于范围 [first,last) 中的元素个数。

只有当范围中的元素数量超过该字节数组的能力,或者该字节数组是共享的,此函数才会分配内存。

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

约束

仅当InputIterator 满足LegacyInputIterator 的要求时,才参与重载解析。

该函数在 Qt 6.6 中引入。

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

将此字节数组的内容替换为n 个c 的副本,并返回对此字节数组的引用。

该字节数组的大小将等于n ,该值必须为非负数。

只有当n 超过该字节数组的大小,或者该字节数组是共享的,此函数才会分配内存。

该函数在 Qt 6.6 中引入。

另请参阅 fill()。

char QByteArray::at(qsizetype i) const

返回字节数组中索引位置为i 的字节。

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

另请参阅 operator[]()。

char &QByteArray::back()

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

提供此函数是为了兼容 STL。

警告: 对空字节数组调用 此函数将导致未定义行为。

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

char QByteArray::back() const

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

提供此函数是为了兼容 STL。

警告: 对空字节数组调用 此函数将导致未定义行为。

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

QByteArray::iterator QByteArray::begin()

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

警告: 当脱离上下文或修改 `QByteArray ` 时,返回的迭代器将失效。

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

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

该函数重载了QByteArray::begin()。

qsizetype QByteArray::capacity() const

返回字节数组中可存储的最大字节数,且无需强制重新分配内存。

此函数的唯一目的是提供一种微调QByteArray 内存使用情况的方法。通常情况下,您几乎不需要调用此函数。若要了解字节数组中包含多少字节,请调用size()。

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

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

另请参阅 ` reserve()` 和 `squeeze()`。

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

返回一个指向字节数组中第一个字节的常量STL 风格迭代器。

警告: 当脱离上下文或修改 `QByteArray ` 时,返回的迭代器将失效。

另请参阅 begin() 和cend()。

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

返回一个指向字节数组中最后一个字节之后的常量STL 风格迭代器。

警告: 当该迭代器被分离,或对 `QByteArray ` 进行修改时,返回的迭代器 将失效。

另请参阅 cbegin() 和end()。

void QByteArray::chop(qsizetype n)

从字节数组的末尾删除n 字节。

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

示例:

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

另请参阅 truncate()、resize() 和first()。

QByteArray QByteArray::chopped(qsizetype len) &&

QByteArray QByteArray::chopped(qsizetype len) const &

返回一个字节数组,其中包含该字节数组最左侧的size() -len 个字节。

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

另请参见 endsWith()、first()、last()、sliced()、chop()、truncate() 和slice()。

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

返回一个指向字节数组中第一个字节的常量STL 风格迭代器。

警告: 当该迭代器与字节数组脱离,或者对QByteArray 进行修改时,返回的迭代器 将失效。

另请参阅 begin() 和constEnd()。

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

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

只要未发生断开操作且 `QByteArray ` 未被修改,该指针即保持有效。

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

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

另请参阅 data()、operator[](),以及fromRawData()。

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

返回一个常量STL 风格的迭代器,该迭代器指向字节数组中最后一个字节的下一位置。

警告: 当该迭代器被解除关联,或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

返回一个指向字节数组中第一个字节的、STL 风格的常量反向迭代器,且顺序为逆序。

警告: 当该迭代器 与对象脱离关联,或QByteArray 发生修改时,返回的迭代器 将失效。

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

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

返回一个常量STL 风格的反向迭代器,该迭代器指向字节数组中最后一个字节之后的第一个位置,且顺序为反向。

警告: 当断开连接或修改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',但大多数接受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

该函数重载了QByteArray::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(默认值),则会预先将字节数组调整为sizesize 的大小。

示例:

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

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

另请参阅 resize()。

[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() 以及slice()。

[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()。

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

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

使用由options 定义的选项,对 Base64 数组base64 进行解码。如果options 的值为IgnoreBase64DecodingErrors (默认值),则不会检查输入的有效性;输入中的无效字符将被跳过,解码过程将继续处理后续字符。如果options 的值为AbortOnBase64DecodingErrors ,则解码将在遇到第一个无效字符时停止。

例如:

void process(const QByteArray &);

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

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

返回一个 QByteArrayFromBase64Result 对象,其中包含解码后的数据以及一个指示解码是否成功的标志。如果传入了AbortOnBase64DecodingErrors 选项且输入数据无效,则解码后的数据包含什么内容未作规定。

另请参阅 toBase64()。

[static] QByteArray QByteArray::fromCFData(CFDataRef data)

创建一个新的QByteArray ,其中包含CFDatadata 的副本。

另请参阅 fromRawCFData()、fromRawData()、toRawCFData() 和toCFData()。

[static, since 6.5] QByteArray QByteArray::fromEcmaUint8Array(emscripten::val uint8array)

构建一个新的QByteArray ,其中包含Uint8Arrayuint8array 的副本。

该函数将数据从一个 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 类型,则该函数将返回一个空的QByteArray 。

该函数在 Qt 6.5 中引入。

另请参阅 toEcmaUint8Array()。

[static] QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)

返回十六进制编码数组hexEncoded 的解码副本。不会对输入的有效性进行检查;输入中的无效字符将被跳过,从而使解码过程能够继续处理后续字符。

例如:

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

另请参阅 toHex()。

[static] QByteArray QByteArray::fromNSData(const NSData *data)

创建一个新的QByteArray ,其中包含NSData对象data 的副本。

另请参阅 fromRawNSData()、fromRawData()、toNSData() 以及toRawNSData()。

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

将 URI/URL 风格的百分比编码中的input 解码。

返回一个包含解码文本的字节数组。percent 参数允许使用“%”以外的其他字符(例如“_”或“=”)作为转义字符。等同于输入。percentDecoded (百分比编码)。

例如:

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

另请参阅 percentDecoded()。

[static, since 6.11] QByteArray QByteArray::fromPercentEncoding(QByteArray &&input, char percent = '%')

这是一个重载函数。

该函数在 Qt 6.11 中引入。

[static] QByteArray QByteArray::fromRawCFData(CFDataRef data)

构建一个QByteArray ,该对象使用CFData对象data 中的字节数据。

data 的字节不会被复制。

调用方必须保证,只要该QByteArray 对象存在,CFData 就不会被删除或修改。

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

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

构建一个QByteArray ,该对象使用data 数组的前size 字节。这些字节不会被复制。QByteArray 将包含data 的指针。调用方必须保证,只要此QByteArray 及其任何未被修改的副本仍然存在,data 就不会被删除或修改。 换言之,由于QByteArray 是一个隐式共享类,且该函数返回的实例包含data 指针,因此只要返回的QByteArray 及其任何副本仍存在,调用方就不得删除data 或直接修改它。但是,QByteArray 并不拥有data 的所有权,因此QByteArray 的析构函数永远不会删除原始的data ,即使最后一个引用data 的QByteArray 被销毁也是如此。

随后若尝试修改返回的QByteArray 的内容,或修改由此生成的任何副本,系统会在进行修改前先创建data 数组的深度拷贝。这确保了原始的data 数组本身绝不会被QByteArray 修改。

以下是一个示例,演示了如何使用QDataStream 读取内存中的原始数据,而无需将原始数据复制到QByteArray 中:

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);
//...

警告: 除非原始数据在位置size 处包含一个 '\0' 字节,否则使用 fromRawData() 创建的字 节数组并非以'\0' 结尾。虽然这对QDataStream 或indexOf() 等函数没有影响,但如果将该字节数组传递给一个期望接收以 '\0' 结尾的const char * 的函数,则会失败。

另请参阅 setRawData()、data()、constData()、nullTerminate() 以及nullTerminated()。

[static] QByteArray QByteArray::fromRawNSData(const NSData *data)

构建一个QByteArray ,该对象使用NSDatadata 中的字节。

data 的字节不会被复制。

调用方必须保证,只要该QByteArray 对象存在,NSData 就不会被删除或修改。

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

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

返回str 字符串的副本,类型为QByteArray 。

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

char &QByteArray::front()

返回字节数组中第一个字节的引用。与operator[](0) 相同。

提供此函数是为了兼容 STL。

警告: 对空字节数组调用 此函数将导致未定义行为。

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

char QByteArray::front() const

返回字节数组中的第一个字节。与at(0) 相同。

提供此函数是为了兼容 STL。

警告: 对空字节数组调用 此函数将导致未定义行为。

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

[since 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

返回在此字节数组中,字节ch 首次出现位置的索引,从索引位置from 开始向前搜索。如果未找到匹配项,则返回-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()。

[since 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 QByteArray &data)

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

该数组会自动扩展以容纳插入的内容。如果i 超出了数组的末尾,则会先用空格字符扩展数组,使其达到i 位置。

另请参阅 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, char ch)

在字节数组的索引位置i 处插入字节ch 。

该数组会自动扩展以容纳此次插入。如果i 超出了数组末尾,则会先用空格字符扩展数组,直到达到该i 位置。

这是一个重载函数。

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

在字节数组的i 位置,从data 开始插入len 字节。

该数组会自动扩展以容纳此次插入。如果i 超出了数组的末尾,则会先用空格字符扩展数组,直到达到i 为止。

这是一个重载函数。

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

将字节ch 的count 个副本插入到字节数组的索引位置i 。

该数组会自动扩展以容纳此次插入。如果i 超出了数组的末尾,则会先用空格字符扩展数组,直到达到该i 位置。

这是一个重载函数。

[constexpr 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

如果该字节数组为空,则返回true ;否则返回false 。

示例:

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

出于历史原因,Qt 将空字节数组与空字节数组区分开来。对于大多数应用程序而言,关键在于字节数组是否包含任何数据,这可以通过isEmpty() 来判断。

另请参阅 isEmpty()。

bool QByteArray::isUpper() const

如果该字节数组为大写字母,即与toUpper() 折叠结果完全一致,则返回true 。

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

另请参阅 isLower() 和toUpper()。

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

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

该函数在 Qt 6.3 中引入。

[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() 以及slice()。

[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时 ,即使通常认为-1 是从字节数组的末尾开始搜索的,但通过负值from ,数据末尾的匹配项仍会被排除在搜索之外:因为末尾的匹配项位于最后一个字符之后,因此被排除。 若要包含此类最终的空匹配项,可为from 指定正值,或完全省略from 参数。

该函数在 Qt 6.0 中引入。

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

[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()。

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()。

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::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()。

[constexpr noexcept] qsizetype QByteArray::length() const

与size() 相同。

[static constexpr noexcept, since 6.8] qsizetype QByteArray::maxSize()

[constexpr noexcept, since 6.8] qsizetype QByteArray::max_size() const

它返回字节数组在理论上所能容纳的元素最大数量。实际上,该数量可能会小得多,具体取决于系统可用的内存大小。

这些函数是在 Qt 6.8 中引入的。

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

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

返回一个字节数组,其中包含从该字节数组中以位置pos 为起始点的len 个字节。

如果您确定pos 和len 不会超出数组边界,请在新代码中改用sliced(),因为它的执行速度更快。

如果len 为 -1(默认值),或者pos +len >=size(),则返回一个字节数组,其中包含从位置pos 开始直至该字节数组末尾的所有字节。

另请参阅 first()、last()、sliced()、chopped()、chop()、truncate(),以及slice()。

[since 6.10] QByteArray &QByteArray::nullTerminate()

如果该字节数组的数据未以空字符结尾,则该方法将对数据进行深度复制,并使其以空字符结尾。

QByteArray 默认是空终止的,但在某些情况下(例如使用fromRawData()时),数据并不一定以\0 字符结尾,这在调用期望接收空终止字符串的方法时可能会造成问题(例如C API)。

该函数于 Qt 6.10 中引入。

另请参阅 nullTerminated()、fromRawData() 和setRawData()。

[since 6.10] QByteArray QByteArray::nullTerminated() &&

[since 6.10] QByteArray QByteArray::nullTerminated() const &

返回该字节数组的副本,该副本始终以空字符结尾。请参阅nullTerminate()。

这些函数在 Qt 6.10 中引入。

另请参阅 nullTerminate()、fromRawData() 和setRawData()。

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

返回一个字节数组,该数组以文本形式表示整数n 。

返回一个字节数组,其中包含一个字符串,该字符串表示n ,并使用指定的base (默认值为10)。支持2至36进制,其中大于9的数字使用字母表示:A代表10,B代表11,依此类推。

示例:

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()。

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

这是一个重载函数。

另请参阅 toLong()。

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

这是一个重载函数。

另请参阅 toLongLong()。

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

这是一个重载函数。

另请参阅 toULongLong()。

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

这是一个重载函数。

另请参见 toUInt()。

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

这是一个重载函数。

另请参阅 toULong()。

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

返回一个字节数组,该数组以文本形式表示浮点数n 。

返回一个字节数组,其中包含一个字符串,该字符串表示n ,其中format 和precision 的含义与QLocale::toString(double, char, int) 中的含义相同。例如:

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

这是一个重载函数。

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

[since 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()。

[since 6.11] QByteArray QByteArray::percentDecoded(char percent = '%') &&

这是一个重载函数。

该函数在 Qt 6.11 中引入。

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(const QByteArray &ba)

在该字节数组前缀添加ba 。

这是一个重载函数。

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

将以“\0 ”结尾的字符串str 追加到此字节数组的前面。

这是一个重载函数。

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

将从str 开始的len 个字节追加到此字节数组的前面。追加的字节可能包含 '\0' 字节。

这是一个重载函数。

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

将字节ch 的count 个副本追加到此字节数组的前面。

这是一个重载函数。

void QByteArray::push_back(const QByteArray &other)

提供此函数是为了兼容 STL。它等同于 append(other)。

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

与 append(str) 相同。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

void QByteArray::push_back(char ch)

与 append(ch) 相同。

这是一个重载函数。

void QByteArray::push_back(const char *str)

与 append(str) 相同。

这是一个重载函数。

void QByteArray::push_front(const QByteArray &other)

提供此函数是为了兼容 STL。它等同于 prepend(other)。

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

与 prepend(str) 相同。

这是一个重载函数。

该函数在 Qt 6.0 中引入。

void QByteArray::push_front(char ch)

与 prepend(ch) 相同。

这是一个重载函数。

void QByteArray::push_front(const char *str)

与 prepend(str) 相同。

这是一个重载函数。

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 风格的反向迭代器,该迭代器指向字节数组中最后一个字节之后的第一个位置,且顺序为反向。

警告: 当与QByteArray 脱离或 被修改时,返回的迭代器将失效。

另请参阅 end()、crend() 和rbegin()。

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

这是一个重载函数。

QByteArray QByteArray::repeated(qsizetype times) const

返回该字节数组的副本,并按指定的times 数量进行重复。

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

示例:

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

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

将索引位置为pos 处的len 字节替换为字节数组after ,并返回对此字节数组的引用。

示例:

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

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

[since 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, QByteArrayView after)

将字节before 的所有出现位置替换为字节数组after 。

这是一个重载函数。

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

将所有出现的字节before 替换为字节after 。

这是一个重载函数。

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

将从before 开始的所有 “bsize ” 字节替换为从after 开始的 “asize ” 字节。由于这两个字符串的大小分别由bsize 和asize 给出,因此它们可能包含 “'\0'” 字节,且无需以 “\0 ” 结尾。

这是一个重载函数。

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

将从索引位置pos 开始的len 字节替换为从位置after 开始的alen 字节。插入的字节可能包含 '\0' 字节。

这是一个重载函数。

void QByteArray::reserve(qsizetype size)

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

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

如果不确定需要多少空间,通常最好将size 设为上限,或者如果严格的上限远大于此值,则设为最可能大小的较高估计值。 如果 `size ` 的估计值过低,一旦预留大小被超过,数组将按需扩展,这可能会导致实际分配的大小超过您最乐观的估计值,并会减慢触发该操作的操作速度。

警告:reserve () 仅预留内存,但不会改变字节数组的大小。访问字节数组末尾之后的数据将导致未定义的行为。若需访问数组当前末尾之后的内存,请使用resize()。

该函数的唯一目的是为微调 `QByteArray` 的内存使用提供一种手段。通常情况下,您几乎不需要调用此函数。

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

void QByteArray::resize(qsizetype size)

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

如果 `size ` 大于当前大小,则将字节数组扩展至 `size ` 字节,并将额外字节添加到数组末尾。新增的字节未初始化。

如果size 小于当前大小,则位置size 之后的部分将从字节数组中移除。

注意:虽然 resize() 会在需要时扩大容量,但它绝不会缩小容量。若要释放多余容量,请使用squeeze()。

另请参阅 size()、truncate() 和squeeze()。

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

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

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

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

注意:虽然 resize() 会在需要时扩大容量,但它绝不会缩小容量。若要释放多余的容量,请使用squeeze()。

该函数在 Qt 6.4 中引入。

另请参阅 size()、truncate() 和squeeze()。

[since 6.8] void QByteArray::resizeForOverwrite(qsizetype size)

将字节数组的大小调整为size 字节。如果字节数组的大小增加,新增的字节将处于未初始化状态。

该行为与resize(size) 完全相同。

该函数在 Qt 6.8 中引入。

另请参阅 resize()。

QByteArray QByteArray::right(qsizetype len) const &

返回一个字节数组,其中包含该字节数组的最后len 字节。

如果已知 `len ` 不会超出范围,请在新代码中改用 `last()`,因为它的执行速度更快。

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

如果 `len ` 小于 0,则返回一个空的 `QByteArray `。

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

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

返回一个大小为width 的字节数组,该数组包含字节fill ,后接此字节数组。

如果 `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 表示为字符串。

将此字节数组设置为一个字符串,该字符串以基数base (默认值为 10)表示n ,并返回对此字节数组的引用。支持 2 到 36 之间的基数,其中 9 以上的数字使用字母表示;A 表示 10,B 表示 11,以此类推。

示例:

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

注意: 数字的格式不随区域设置而变化;无论用户的区域设置如何,均使用默认的 C 区域设置。请使用QLocale 在数字和字符串之间进行支持区域设置的转换。

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

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

这是一个重载函数。

另请参阅 toLong()。

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

这是一个重载函数。

另请参阅 toLongLong()。

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

这是一个重载函数。

另请参阅 toULongLong()。

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

这是一个重载函数。

另请参阅 toShort()。

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

这是一个重载函数。

另请参阅 toUInt()。

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

这是一个重载函数。

另请参阅 toULong()。

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

这是一个重载函数。

另请参阅 toUShort()。

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

将浮点数n 表示为文本。

将此字节数组设置为表示n 的字符串,其中format 和precision 的含义与QLocale::toString (double、char、int)中的含义相同,并返回对此字节数组的引用。

这是一个重载函数。

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

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

将浮点数n 表示为文本。

将此字节数组设置为表示n 的字符串,其中format 和precision 的含义与QLocale::toString (double, char, int)中的含义相同,并返回对此字节数组的引用。

这是一个重载函数。

另请参阅 toFloat() 和QLocale::FloatingPointPrecisionOption 。

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

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

该函数可替代fromRawData() 来复用现有的QByteArray 对象,从而节省内存重新分配。

另请参阅 fromRawData()、data()、constData()、nullTerminate()和nullTerminated()。

void QByteArray::shrink_to_fit()

提供此函数是为了兼容STL。它等同于squeeze()。

QByteArray QByteArray::simplified() const

返回该字节数组的副本,其中已移除了开头和结尾的空格字符,并且每个内部空格字符序列都被替换为一个空格。

这些空格字符是指在 C 语言环境中,标准 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::SpecialCharacter 以及Spacing Characters 。

[constexpr noexcept] qsizetype QByteArray::size() const

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

字节数组的最后一个字节位于索引 size() - 1 处。此外,QByteArray 确保位于索引 size() 处的字节始终为 '\0',因此您可以将data() 和constData() 的返回值用作需要 '\0' 结尾字符串的函数的参数。 如果 `QByteArray ` 对象是从一个未包含尾部 `\0` 终止字节的 `raw data ` 创建的,那么除非创建了深度拷贝,否则 `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()。

[since 6.8] QByteArray &QByteArray::slice(qsizetype pos, qsizetype n)

将此字节数组修改为从位置pos 开始,长度为n 字节,并返回对此字节数组的引用。

注意: 如果pos < 0、n < 0 或pos +n >size(),则行为 未定义。

示例:

QByteArray x = "Five pineapples"_ba;
x.slice(5);     // x == "pineapples"
x.slice(4, 3);  // x == "app"

该函数在 Qt 6.8 中引入。

另请参阅 sliced()、first()、last()、chopped()、chop() 以及truncate()。

[since 6.8] QByteArray &QByteArray::slice(qsizetype pos)

修改此字节数组,使其从位置pos 开始,直至数组末尾,并返回对此字节数组的引用。

注意: 若pos < 0 或pos >size(),则行为 未定义。

这是一个重载函数。

该函数在 Qt 6.8 中引入。

另请参见 sliced()、first()、last()、chopped()、chop()和truncate()。

[since 6.0] QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) &&

[since 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() 以及slice()。

[since 6.0] QByteArray QByteArray::sliced(qsizetype pos) &&

[since 6.0] QByteArray QByteArray::sliced(qsizetype pos) const &

返回一个字节数组,其中包含从该对象的pos 位置开始、直至该对象末尾的所有字节。

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

这些函数在 Qt 6.0 中引入。

另请参阅 first()、last()、chopped()、chop()、truncate(),以及slice()。

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 hello("<p>Hello?</p>");
hello.toBase64(QByteArray::Base64Encoding | QByteArray::OmitTrailingEquals);      // returns "PHA+SGVsbG8/PC9wPg"
hello.toBase64(QByteArray::Base64Encoding);                                       // returns "PHA+SGVsbG8/PC9wPg=="
hello.toBase64(QByteArray::Base64UrlEncoding);                                    // returns "PHA-SGVsbG8_PC9wPg=="
hello.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 = string.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 = byteArray.toEcmaUint8Array();

该函数在 Qt 6.5 中引入。

另请参阅 fromEcmaUint8Array()。

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 = string.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

返回一个已转换为int 的字节数组,转换时采用基数base ,默认基数为10。支持基数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

返回一个已转换为long 整数的字节数组,转换时采用基数base ,默认基数为10。支持基数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

返回一个已转换为long long 的字节数组,转换时采用基数base ,默认基数为10。支持基数0以及2至36,其中9以上的数字使用字母表示;A代表10,B代表11,依此类推。

如果 `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 参数,您可以将默认的“%”字符替换为其他字符。

默认情况下,该函数会将所有不属于以下情况的字节进行编码:

字母(“a”至“z”和“A”至“Z”) / 数字(0至9) / “-” / “.” / “_” / “~”

若要防止字节被编码,请将其传递给exclude 。若要强制对字节进行编码,请将其传递给include 。字符percent 始终会被编码。

示例:

QByteArray text= "{可疑的字符串?}";
QByteArray ba=text.toPercentEncoding("{}", "s");
qDebug("%s", ba.constData());
// 输出“{a fi%73hy %73tring%3F}”

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

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

CFDataRef QByteArray::toRawCFData() const

构建一个使用QByteArray 字节数据的CFData对象。

QByteArray 的字节不会被复制。

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

另请参阅 toCFData()、fromRawCFData()、fromCFData() 和fromRawData()。

NSData *QByteArray::toRawNSData() const

构建一个使用QByteArray 的字节内容的NSData对象。

QByteArray 的字节不会被复制。

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

另请参阅 fromRawNSData()、fromNSData()、fromRawData() 和toNSData()。

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

返回已转换为short 格式的字节数组,转换时采用基数base (默认值为10)。支持基数0以及2至36,其中9以上的数字使用字母表示;A代表10,B代表11,以此类推。

如果 `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

返回一个已转换为unsigned int 的字节数组,转换时采用基数base (默认值为10)。支持基数0以及2至36,其中大于9的数字使用字母表示;A代表10,B代表11,依此类推。

如果 `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

返回一个已转换为unsigned long int 的字节数组,转换时使用基数base (默认值为10)。支持基数0以及2至36,其中大于9的数字使用字母表示;A代表10,B代表11,依此类推。

如果 `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 转换为unsigned long long ,默认基数为10。支持基数0以及2至36,其中大于9的数字使用字母表示;A代表10,B代表11,依此类推。

如果 `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

返回一个已转换为unsigned short 的字节数组,转换时采用基数base (默认值为10)。支持基数0以及2至36,其中大于9的数字使用字母表示;A代表10,B代表11,以此类推。

如果 `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() 以及Character Case 。

QByteArray QByteArray::trimmed() const

返回该字节数组的副本,并从数组的开头和结尾移除空格字符。

这些空格字符是指在 C 语言环境中,标准 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";

与 `simplified()` 不同,`trimmed()` 会保留内部空格不变。

另请参阅 simplified()、QChar::SpecialCharacter 以及Spacing Characters 。

void QByteArray::truncate(qsizetype pos)

截取索引位置为pos 处的字节数组。

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

示例:

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

另请参阅 chop()、resize() 和first()。

QByteArray::operator const char *() const

QByteArray::operator const void *() const

注意: 在新代码中请改用 constData()。

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

只要未发生脱离且QByteArray 未被修改,该指针即保持有效。

该运算符主要用于将字节数组传递给接受 `const char *` 的函数。

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

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

另请参阅 constData()。

[noexcept, since 6.10] QByteArray::operator std::string_view() const

将此QByteArray 对象转换为std::string_view 对象。返回的字符串视图将覆盖整个字节数组。

该函数于 Qt 6.10 中引入。

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 追加到该字节数组的末尾,并返回该字节数组的引用。

这是一个重载函数。

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

将other 通过Move操作赋值给此QByteArray 实例。

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

将other 赋值给此字节数组,并返回对此字节数组的引用。

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

将str 赋值给此字节数组。

str 该字符串被假定为指向一个以空字符结尾的字符串,其长度由系统动态确定。

这是一个重载函数。

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

与 (i) 相同。

这是一个重载函数。

相关的非成员

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

从字节数组 `ba` 中移除所有与 `t ` 相等的元素。返回被移除的元素个数(如有)。

该函数在 Qt 6.1 中引入。

另请参阅 erase_if 。

[since 6.1] template <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 )中公布的算法。

注意:本函数 是 CRC-16-CCITT 算法的 16 位缓存优化(16 条目表)实现。

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 版本(可追溯至该功能添加时的 Qt 3.1)中的qCompress() 压缩的数据。

注意:如果要使用此函数解压使用 zlib 压缩的外部数据,首先需要在包含数据的字节数组前添加一个 4 字节的头。 该头必须包含未压缩数据的预期长度(以字节为单位),表示为一个无符号、大端序的 32 位整数。不过,该数值仅作为输出缓冲区初始大小的参考。 如果指定的大小太小,无法容纳结果,输出缓冲区的大小仍会不断增加,直到输出数据能够容纳其中,或者系统内存耗尽为止。因此,尽管使用了 32 位头,但在 64 位平台上,此函数仍可生成超过 4GiB 的输出。

注意:在 Qt 6.5 之前的版本中,超过 2GiB 的数据处理可能不稳定;而在 Qt 6.0 之前的版本中,则完全无法处理。

另请参阅 qCompress()。

QByteArray qUncompress(const uchar *data, qsizetype nbytes)

对data 的前nbytes 进行解压缩,并返回一个包含解压缩数据的新字节数组。

这是一个重载函数。

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

一个安全的strcmp() 函数。

比较str1 和str2 。若str1 小于str2 ,则返回负值;若str1 等于str2 ,则返回 0;若str1 大于str2 ,则返回正值。

如果两个字符串均为nullptr ,则视为相等;否则,如果其中一个为nullptr ,则将其视为小于另一个(即使另一个是空字符串)。

另请参阅 qstrncmp()、qstricmp()、qstrnicmp()、Character Case 以及QByteArray::compare()。

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

将src 中截至“\0 ”(含该字符)的所有字符复制到dst 中,并返回指向dst 的指针。如果src 为nullptr ,则立即返回nullptr 。

该函数假设dst 足够大,能够容纳src 的内容。

注意:如果 dst 和src 存在重叠,则行为未定义。

另请参阅 qstrncpy()。

char *qstrdup(const char *src)

返回一个相同的字符串。

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

所有权已转移给调用方,因此必须使用 `delete[]` 来删除返回的字符串。

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

一个安全的stricmp() 函数。

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

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

如果两个字符串均为nullptr ,则视为相等;否则,如果其中任一个为nullptr ,则将其视为小于另一个(即使另一个是空字符串)。

另请参阅 qstrcmp()、qstrncmp()、qstrnicmp()、Character Case 以及QByteArray::compare()。

size_t qstrlen(const char *str)

一个安全的 `strlen() ` 函数。

返回紧接在结束符 '\0' 之前的字符数;若str 为nullptr ,则返回 0。

另请参阅 qstrnlen()。

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

一个安全的strncmp() 函数。

比较str1 和str2 中最多len 字节的数据。

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

如果两个字符串均为nullptr ,则视为相等;否则,如果其中任一个为nullptr ,则将其视为小于另一个(即使另一个是空字符串或len 为0)。

另请参阅 qstrcmp()、qstricmp()、qstrnicmp()、Character Case 以及QByteArray::compare()。

char *qstrncpy(char *dst, const char *src, size_t len)

一个安全的strncpy() 函数。

从src 复制至多len 字节(在len 或终止符 '\0' 处停止,以先到者为准)到dst 。保证dst 以 '\0' 结尾,除非dst 为nullptr 或len 为 0。如果src 为nullptr ,则返回nullptr ;否则返回dst 。

该函数假设dst 的长度至少为len 个字符。

注意:如果 dst 和src 存在重叠,则行为未定义。

注意:与 strncpy()不同 ,该函数不会将'\0' 写入dst 的全部len 个字节,而是在终止符 '\0' 之后停止。从这个意义上说,它与 C11 中的 strncpy_s() 类似。

另请参阅 qstrcpy()。

int qstrnicmp(const char *s1, const char *s2, size_t len)

一个安全的strnicmp() 函数。

最多比较 `s1 ` 和 `s2` 之间最多 `len ` 字节的内容,忽略任何 ASCII 字符的大小写差异。

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

如果两个字符串均为nullptr ,则视为相等;否则,如果其中任一个为nullptr ,则将其视为小于另一个(即使另一个是空字符串或len 为0)。

另请参见 qstrcmp()、qstrncmp()、qstricmp()、Character Case 以及QByteArray::compare()。

size_t qstrnlen(const char *str, size_t maxlen)

一个安全的strnlen() 函数。

返回紧接在终止符“\0 ”之前的字符数,但最多为maxlen 。若str 为nullptr ,则返回0。

另请参阅 qstrlen()。

[noexcept] bool operator!=(const QByteArray &lhs, const QByteArray &rhs)

如果字节数组 `lhs ` 与字节数组 `rhs` 不相等,则返回 `true `;否则返回 `false`。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator!=(const QByteArray &lhs, const char *const &rhs)

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

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator!=(const char *const &lhs, const QByteArray &rhs)

如果以单引号 '\0' 结尾的字符串lhs 与字节数组rhs 不相等,则返回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::StringLiterals;

auto str = "hello"_ba;

该函数在 Qt 6.4 中引入。

另请参阅 Qt::Literals::StringLiterals 。

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

返回一个字节数组,该数组是将字节数组a1 与字节数组a2 拼接后的结果。

另请参阅 QByteArray::operator+=()。

[since 6.9] QByteArray operator+(QByteArrayView lhs, const QByteArray &rhs)

[since 6.9] QByteArray operator+(const QByteArray &lhs, QByteArrayView rhs)

返回一个字节数组,该数组是lhs 和rhs 拼接后的结果。

这些函数在 Qt 6.9 中引入。

另请参阅 QByteArray::operator+=()。

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

返回一个字节数组,该数组是字节a1 与字节数组a2 拼接后的结果。

这是一个重载函数。

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

返回一个字节数组,该数组是将字节数组a1 与字节a2 拼接后的结果。

这是一个重载函数。

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

返回一个字节数组,该数组是将字节数组a1 与以'\0'结尾的字符串a2 拼接而成的结果。

这是一个重载函数。

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

返回一个字节数组,该数组是将以“\0 ”结尾的字符串a1 与字节数组a2 拼接后得到的结果。

这是一个重载函数。

[noexcept] bool operator<(const QByteArray &lhs, const QByteArray &rhs)

如果字节数组lhs 在词法上小于字节数组rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator<(const QByteArray &lhs, const char *const &rhs)

如果字节数组lhs 在字面意义上小于以 '\0' 结尾的字符串rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator<(const char *const &lhs, const QByteArray &rhs)

如果以单引号 '\0' 结尾的字符串lhs 在词法上小于字节数组rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

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

将字节数组ba 写入流out ,并返回该流的引用。

另请参阅 《Qt 数据类型的序列化》。

[noexcept] bool operator<=(const QByteArray &lhs, const QByteArray &rhs)

如果字节数组lhs 在词法上小于或等于字节数组rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator<=(const QByteArray &lhs, const char *const &rhs)

如果字节数组 `lhs ` 在字面意义上小于或等于以单引号 `'\0'` 结尾的字符串 `rhs`,则返回 `true `;否则返回 `false`。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator<=(const char *const &lhs, const QByteArray &rhs)

如果以单引号 '\0' 结尾的字符串lhs 在词法上小于或等于字节数组rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const QByteArray &lhs, const QByteArray &rhs)

如果字节数组lhs 与字节数组rhs 相等,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const QByteArray &lhs, const char *const &rhs)

如果字节数组lhs 与以 '\0' 结尾的字符串rhs 相等,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator==(const char *const &lhs, const QByteArray &rhs)

如果以单引号('\0')结尾的字符串lhs 等于字节数组rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const QByteArray &lhs, const QByteArray &rhs)

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

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const QByteArray &lhs, const char *const &rhs)

如果字节数组lhs 在字面量上大于以 '\0' 结尾的字符串rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>(const char *const &lhs, const QByteArray &rhs)

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

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const QByteArray &lhs, const QByteArray &rhs)

如果字节数组 `lhs ` 在字面量上大于或等于字节数组 `rhs`,则返回 `true `;否则返回 `false`。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const QByteArray &lhs, const char *const &rhs)

如果字节数组lhs 在字面意义上大于或等于以 '\0' 结尾的字符串rhs ,则返回true ;否则返回false 。

这是一个重载函数。

另请参阅 QByteArray::compare()。

[noexcept] bool operator>=(const char *const &lhs, const QByteArray &rhs)

如果以单引号 '\0' 结尾的字符串lhs 在词法上大于或等于字节数组rhs ,则返回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_ASCII 和QT_NO_CAST_FROM_ASCII 。

[since 6.8] QT_NO_QSNPRINTF

定义此宏将导致无法使用 qsnprintf() 和 qvsnprintf() 函数。有关为何可能需要禁用这些函数的说明,请参阅相关函数的文档。

该宏于 Qt 6.8 中引入。

另请参阅 qsnprintf() 和qvsnprintf()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.