QByteArray Class

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

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

该类具有很强的可比性

该类与 const char * 和QByteArrayView 具有很强的可比性

该类与QChar, 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()
QByteArray(const char*data, qsizetypesize= -1)
QByteArray(qsizetypesize, Qt::Initialization)
QByteArray(qsizetypesize, charch)
QByteArray(const QByteArray&other)
QByteArray(QByteArray&&other)
~QByteArray()
QByteArray &append(常量 QByteArray&ba)
QByteArray &append(QByteArrayViewdata)
QByteArray &append(字符串)
QByteArray &append(const char*str)
QByteArray & (const char *str, qsizetype len)append(常量字符*str, qsizetypelen)
QByteArray &append(qsizetypecount, charch)。
(since 6.6) QByteArray &(QByteArrayassign(QByteArrayViewv)
(since 6.6) QByteArray & (QByteArrayView v)assign(输入迭代器first、输入迭代器last)
(since 6.6) QByteArray &assign(qsizetypen, charc)
字符串 at(qsizetypei) const
char &back()
char back() const
QByteArray::iterator begin()
QByteArray::const_iterator begin()常量
qsizetype capacity()常数
QByteArray::const_iterator cbegin()常数
QByteArray::const_iterator cend()常数
void chop(qsizetypen)
QByteArray chopped(qsizetypelen) &&
QByteArray chopped(qsizetypelen) const &
void clear()
(since 6.0) (QByteArrayView bv, Qt::CaseSensitivity) compare(QByteArrayViewbv, Qt::CaseSensitivitycs= Qt::CaseSensitive) const
QByteArray::const_iterator constBegin()常数
const char *constData()常数
QByteArray::const_iterator constEnd()常量
(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()常数
QByteArray::const_reverse_iterator crend()常数
字符串 *data()
const char *data()常量
QByteArray::iterator end()
QByteArray::const_iterator end()常量
(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()
字符串 front()常数
(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 & (qsizetype i, const QByteArray &data)insert(qsizetypei, charch)
QByteArray & (qsizetype i, char *s)insert(qsizetypei, const char*data, qsizetypelen)
QByteArray & (qsizetype i, const char *data, qsizetype len)insert(qsizetypei, qsizetypecount, charch)
bool isEmpty() 常量
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(字符串ch,qsizetypefrom= -1) 常量
QByteArray left(qsizetypelen) &&
QByteArray left(qsizetypelen) const &
QByteArray leftJustified(qsizetypewidth, charfill= ' ', booltruncate= false) const
qsizetype length() 常量
(since 6.8) qsizetype max_size() const
QByteArray mid(qsizetypepos, qsizetypelen= -1) &&
QByteArray mid(qsizetypepos, qsizetypelen= -1) const &
(since 6.4) QByteArray percentDecoded(charpercent= '%') const
QByteArray &prepend(QByteArrayViewba)
QByteArray &prepend(字符串)
QByteArray &prepend(const QByteArray&ba)
QByteArray &prepend(const char*str)
QByteArray & (const char *str, qsizetype len)prepend(常量字符*str, qsizetypelen)
QByteArray &prepend(qsizetypecount, charch)
void push_back(常数 QByteArray&other)
(since 6.0) 无效 push_back(QByteArrayViewstr)
void push_back(字符串)
无效 push_back(const char*str)
void push_front(const QByteArray&other)
(since 6.0) void push_front(QByteArrayViewstr)
无效 push_front(字符串)
无效 push_front(const char*str)
QByteArray::reverse_iterator rbegin()
QByteArray::const_reverse_iterator rbegin()常数
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()常数
QByteArray repeated(qsizetypetimes) const
QByteArray &replace(qsizetypepos, qsizetypelen, QByteArrayViewafter)
(since 6.0) QByteArray &replace(QByteArrayViewbefore, QByteArrayViewafter)
QByteArray &replace(前为 char,为 QByteArrayView)
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(QByteArray)
QByteArray right(qsizetypelen) &&
QByteArray right(qsizetypelen) const &
字节数组 rightJustified(qsizetypewidth, charfill= ' ', booltruncate= false) const
QByteArray &setNum(intn, intbase= 10)
QByteArray &setNum(长n,intbase= 10)
QByteArray &setNum(qlonglongn, intbase= 10)
QByteArray &setNum(qulonglongn, intbase= 10)
QByteArray &setNum(短n,intbase= 10)
QByteArray &setNum(uintn,intbase= 10)
QByteArray & (ulong n, int base = 10)setNum(ulongn, intbase= 10)
QByteArray &setNum(ushortn, intbase= 10)
QByteArray &setNum(doublen, charformat= 'g', intprecision= 6)
QByteArray &setNum(浮点数n,字符格式= 'g',int精度= 6)
QByteArray &setRawData(常量 char *data,qsizetypesize)
void shrink_to_fit()
QByteArray simplified()常量
qsizetype size()常数
(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> (char sep) const 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()常量
toDouble(bool*ok= nullptr) const
(since 6.5) emscripten::val toEcmaUint8Array()
浮点数 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常数
NSData *toNSData()常数
QByteArray toPercentEncoding(const QByteArray&exclude= QByteArray(), const QByteArray&include= QByteArray(), charpercent= '%') const
CFDataRef toRawCFData() const
NSData *toRawNSData() const
toShort(bool*ok= nullptr, intbase= 10) const
std::string toStdString()常量
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()常数
QByteArray trimmed()常数
void truncate(qsizetypepos)
const char *operator const char *()常量
const void *operator const void *() const
QByteArray &operator+=(const QByteArray&ba)
QByteArray &operator+=(charch)
QByteArray &operator+=(const char*str)
QByteArray &operator=(QByteArray&&other)
QByteArray &operator=(常量 QByteArray&other)
QByteArray &operator=(const char*str)
字符串 &operator[](qsizetypei)
字符串 operator[](qsizetypei) 常量

静态公共成员

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 = '%')
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 *str1, const char *str2, 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)
(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 QByteArray &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')和传统的以'\0'结尾的 8 位字符串。使用 QByteArray 要比使用const char * 方便得多。在幕后,它始终确保数据后跟一个"(0)"结束符,并使用隐式共享(写时复制)来减少内存使用量,避免不必要的数据复制。

除了 QByteArray 之外,Qt XML 还提供了用于存储字符串数据的QString 类。在大多数情况下,QString 是您要使用的类。它将其内容理解为 Unicode 文本(使用 UTF-16 编码),而 QByteArray 则旨在避免假设其存储字节的编码或语义(除了少数使用 ASCII 编码的传统情况)。此外,Qt XML API 中始终使用QString 。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() 比 operator[]() 更快,因为它不会导致深度复制

要一次提取多个字节,可使用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 "字节之前(不包括第一个"\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_iteratorQByteArray::iterator )。实际上,在使用 C++ 标准库提供的通用算法时,迭代器非常方便。

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

注意: QByteArray 上的迭代器,以及对其中单个字节的引用,在调用 QByteArray 的任何非const 方法时都无法保持有效。在调用非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>=() 等)比较 s。这种比较完全基于字节的数值,速度非常快,但并不符合人类的期望。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 locale 和 ASCII 编码。QString 支持标准 Unicode 编码,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()。

这个问题不适用于QStrings,因为它们使用 Unicode 表示字符。

另请参阅 QByteArrayViewQStringQBitArray

成员类型文档

枚举 QByteArray::Base64Option
flags QByteArray::Base64Options

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

常量描述
QByteArray::Base64Encoding0(默认)常规 Base64 字母,简称 "base64
QByteArray::Base64UrlEncoding1备用字母表,称为 "base64url",替换字母表中的两个字符,以便对 URL 更友好。
QByteArray::KeepTrailingEquals0(默认)在编码数据末尾保留等号,因此数据大小总是四的倍数。
QByteArray::OmitTrailingEquals2省略在编码数据末尾添加等号。
QByteArray::IgnoreBase64DecodingErrors0解码 Base64 编码数据时,忽略输入中的错误;直接跳过无效字符。该枚举值已在 Qt 5.15 中添加。
QByteArray::AbortOnBase64DecodingErrors4解码 Base64 编码数据时,在出现第一个解码错误时停止解码。该枚举值已在 Qt 5.15 中添加。

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

Base64Options 类型是QFlags<Base64Option> 的类型定义。它存储 Base64Option 值的 OR 组合。

QByteArray::const_iterator

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

另请参见 QByteArray::const_reverse_iteratorQByteArray::iterator

QByteArray::const_reverse_iterator

该类型定义为QByteArray 提供了 STL 风格的 const 反向迭代器。

另请参见 QByteArray::reverse_iteratorQByteArray::const_iterator

QByteArray::iterator

该类型定义为QByteArray 提供了一个 STL 风格的非表迭代器。

另请参见 QByteArray::reverse_iteratorQByteArray::const_iterator

QByteArray::reverse_iterator

该类型定义为QByteArray 提供了 STL 风格的非 const 反向迭代器。

另请参见 QByteArray::const_reverse_iteratorQByteArray::iterator

成员函数文档

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

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

它返回字节数组理论上可容纳的最大元素数。实际上,受系统可用内存量的限制,这个数字可能要小得多。

此函数在 Qt 6.8 中引入。

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'在内的任何字节值,但大多数接受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) const &

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

如果知道len 不可能出界,请在新代码中使用last() 代替,因为这样速度更快。

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

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

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

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

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

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

QByteArray QByteArray::chopped(qsizetype len) &&

QByteArray QByteArray::chopped(qsizetype len) const &

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

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

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

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

[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, Qt::Initialization)

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

QByteArray::QByteArray(qsizetype size, char ch)

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

另请参见 fill()。

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

构造other 的副本。

由于 QByteArray 是隐式共享的,因此该操作耗时不变。这使得从函数返回 QByteArray 的速度非常快。如果共享实例被修改,它将被复制(写时复制),这需要线性时间

另请参见 operator=().

[noexcept] 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)

这是一个重载函数。

count 的字节副本ch 附加到此字节数组,并返回此字节数组的引用。

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

该函数重载 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()。

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

返回存储在字节数组中的 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

返回一个 ConstSTL 样式的反向迭代器,以相反顺序指向字节数组中的第一个字节。

警告: 返回的迭代器在分离或修改QByteArray 时失效。

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

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

返回一个 ConstSTL 样式的反向迭代器,以相反的顺序指向字节数组中最后一个字节的后面。

警告: 返回的迭代器会在分离或修改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

此函数重载 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)

使用options 定义的选项,返回 Base64 数组base64 的解码副本。如果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 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 参数必须是引用 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 ,其中包含 NSDatadata 的副本。

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

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

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

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

例如

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

另见 percentDecoded().

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

构造一个使用 CFDatadata 字节的QByteArray

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 ,即使最后一个引用dataQByteArray 已被销毁。

如果随后试图修改返回的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)"字节。虽然这对于QDataStreamindexOf() 等函数来说并不重要,但将字节数组传递给接受const char * 的函数时,如果预期该数组是以"(0)"结束的,则会失败。

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

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

构造一个使用 NSDatadata 字节的QByteArray

data 的字节不会被复制。

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

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

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

QByteArray 的形式返回str 字符串的副本。

另请参阅 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

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

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

这是一个重载函数。

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

该数组会不断增长,以容纳插入的内容。如果i 超过了数组的末尾,则首先用空格字符扩展数组,以达到i 的位置。

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

这是一个重载函数。

在字节数组的索引位置i 插入count 份字节ch

该数组会增长以适应插入。如果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

如果该字节数组为空,则返回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] qsizetype QByteArray::lastIndexOf(QByteArrayView bv, qsizetype from) const

从索引位置from 开始向后搜索,返回bv 所查看的字节序列在该字节数组中最后一次出现的起始索引位置。

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

[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

这是一个重载函数。

从索引位置from 开始向后搜索,返回该字节数组中最后出现的字节ch 的起始索引位置。如果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::leftJustified(qsizetype width, char fill = ' ', bool truncate = false) const

返回一个大小为width 的字节数组,该数组包含一个以fill 字节填充的字节数组。

如果truncate 为假,且字节数组的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 的字节数组。

使用指定的base (默认为 10),返回包含字符串的字节数组n 。支持基数 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 的字符串,给定formatprecision ,其含义与QString::number (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()。

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)

这是一个重载函数。

lenstr 开始的字节预置到此字节数组中。预输入的字节可能包括"(0)"字节。

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

这是一个重载函数。

count 的字节副本ch 预置到此字节数组中。

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)

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

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

用字节数组after 替换索引位置poslen 字节,并返回对该字节数组的引用。

示例

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)

这是一个重载函数。

用字节数组after 替换字节数组before 的每一次出现。

举例说明:

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)

这是一个重载函数。

用字节数组after 替换字节before 中出现的每一个字节。

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

这是一个重载函数。

用字节after 替换before 中出现的每一个字节。

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

这是一个重载函数。

用从after 开始的asize 字节替换从before 开始的bsize 字节。由于字符串的大小由bsizeasize 给出,因此它们可能包含"(0)"字节,不需要以"(0)"结尾。

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

这是一个重载函数。

用从位置after 开始的alen 字节替换索引位置poslen 字节。插入的字节可能包括"(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::rightJustified(qsizetype width, char fill = ' ', bool truncate = false) const

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

如果truncate 为假,且字节数组的大小大于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 表示为文本。

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

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

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

这是一个重载函数。

将浮点数n 表示为文本。

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

另请参阅 toFloat() 。

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() 函数在 C 语言中返回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

[noexcept] qsizetype QByteArray::size() const

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

字节数组中的最后一个字节位于 size() - 1 位置。此外,QByteArray 还会确保 size() 位置的字节始终为"(0)",这样就可以将data() 和constData() 的返回值用作预期以"(0)"结尾的字符串函数的参数。如果QByteArray 对象是从raw data 创建的,而 没有包含尾部的"(0)"字节,那么QByteArray 不会自动添加尾部的"(0)"字节,除非创建了深拷贝

举例说明:

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

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-encoded 数据的算法在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 = byteArray.toEcmaUint8Array();

此函数在 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 的字节数组,默认为 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 number().

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

返回字节数组转换为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 来报告成功。

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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 number().

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

返回使用基数base 转换为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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 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 参数允许您用其他字符覆盖默认的"%"字符。

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

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

要防止字节被编码,请将其发送至exclude 。要强制字节被编码,请将其发送至includepercent 字符始终被编码。

示例

QByteArraytext= "{a fishy string?}"QByteArrayba=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

返回使用基数base 转换为short 的字节数组,默认为 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 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 转换为unsigned int 的字节数组,默认为 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 number().

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

返回使用基数base 转换为unsigned long int 的字节数组,默认为 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 number().

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

返回使用基数base 转换为unsigned short 的字节数组,默认为 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 可在数字和字符串之间执行本地化转换。

注: Qt 6.4 添加了对 "0b "前缀的支持。

另请参阅 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++isspace() 函数在 C 语言中返回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 &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)

Move-assignsother 到此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

这是一个重载函数。

与 at(i) 相同。

相关非会员

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

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

这是一个重载函数。

返回一个字节数组,该数组是lhsrhs 的连接结果。

此函数在 Qt 6.9 中引入。

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

[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

此函数将解压缩使用qCompress() 压缩的数据,这些数据来自此版本和任何较早的 Qt 版本,最早可追溯到添加此功能的 Qt 3.1。

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

注: 在 Qt 6.5 之前的 Qt 版本中,超过 2GiB 的数据工作不可靠;在 Qt 6.0 之前的 Qt 版本中,则完全不可靠。

另请参阅 qCompress().

QByteArray qUncompress(const uchar *data, qsizetype nbytes)

这是一个重载函数。

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

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

安全的strcmp() 功能。

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

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

另请参阅 qstrncmp()、qstricmp()、qstrnicmp()、Character CaseQByteArray::compare()。

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

将包括"\0 "在内的所有字符从src 复制到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()、Character CaseQByteArray::compare()。

size_t qstrlen(const char *str)

一个安全的strlen() 函数。

返回终止符"\0 "之前的字符数,如果strnullptr ,则返回 0。

另请参阅 qstrnlen() 。

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

一个安全的strncmp() 函数。

最多比较str1str2len 字节。

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

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

另请参阅 qstrcmp()、qstricmp()、qstrnicmp()、Character CaseQByteArray::compare()。

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

一个安全的strncpy() 函数。

最多将len 字节从src 复制到dst (以len 或终止符"\0 "为准)。保证dst 为'\0'终止,除非dstnullptrlen 为 0。如果srcnullptr ,则返回nullptr ,否则返回dst

此函数假定dst 长度至少为len 字符。

注意: 如果dstsrc 重叠,则行为未定义。

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

另请参阅 qstrcpy() 。

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

一个安全的strnicmp() 函数。

最多比较str1str2len 字节,忽略任何 ASCII 字符的差异。

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

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

另请参阅 qstrcmp()、qstrncmp()、qstricmp()、Character CaseQByteArray::compare()。

size_t qstrnlen(const char *str, size_t maxlen)

一个安全的strnlen() 函数。

返回终止符"\0 "之前的字符数,但最多返回maxlen 。如果strnullptr ,则返回 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::Literals::StringLiterals;

auto str = "hello"_ba;

此功能在 Qt 6.4 中引入。

另请参见 Qt::Literals::StringLiterals

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

这是一个重载函数。

返回字节数组a1 和字节数组a2 的连接结果。

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

这是一个重载函数。

返回一个字节数组,该数组是字节数组a1 和字节a2 的连接结果。

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 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_ASCIIQT_NO_CAST_FROM_ASCII

[since 6.8] QT_NO_QSNPRINTF

定义此宏后,将无法使用 qsnprintf() 和 qvsnprintf() 函数。有关禁用这些函数的原因,请参阅函数文档。

此宏在 Qt 6.8 中引入。

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

© 2025 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.