在构造函数中串联 2 个字节数组会产生奇怪的结果
Concatenation of 2 byte arrays in constructor gives strange result
Qt 6.2.1 MinGW
我有 2 个数组,header FirstArray
和 body SecondArray
。我知道 copy-paste, 不擅长编程,所以一开始就这样做了:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QByteArray FirstArray=QByteArray(std::begin<char>({static_cast<char>(0xA5), 0x5A, static_cast<char>(0xB5), 0x5B}), 4);
const QByteArray SecondArray=QByteArray(FirstArray+std::begin<char>({0x18, 0x00, 0x01, static_cast<char>(0x9B), 0x03, 0x09, 0x00, 0x19, static_cast<char>(0x91)}), 13);
qDebug()<< SecondArray.toHex();
return a.exec();
}
我预期的结果:
"a55ab55b1800019b0309001991"
但在输出中我看到:
"a55ab55b1800adbaababababab"
然后我重写第二个QByteArray
初始化,去掉构造函数中的加号操作:
const QByteArray SecondArray=QByteArray(std::begin<char>({static_cast<char>(0xA5), 0x5A, static_cast<char>(0xB5), 0x5B, 0x18, 0x00, 0x01, static_cast<char>(0x9B), 0x03, 0x09, 0x00, 0x19, static_cast<char>(0x91)}), 13);
我得到:
"a55ab55b1800019b0309001991"
为什么第一种情况会发生?如何正确书写?
如评论所述,您正在致电
const QByteArray operator+(const QByteArray &a1, const char *a2)
根据其 documentation:
Returns a byte array that is the result of concatenating byte array a1 and string a2.
除了a2
指向一个以null结尾的字符串。
您可以将串联重新排列为
FirstArray + QByteArray(std::begin<char>({0x18, ......
调用另一个不依赖于 c 字符串空终止的重载。
Qt 6.2.1 MinGW
我有 2 个数组,header FirstArray
和 body SecondArray
。我知道 copy-paste, 不擅长编程,所以一开始就这样做了:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QByteArray FirstArray=QByteArray(std::begin<char>({static_cast<char>(0xA5), 0x5A, static_cast<char>(0xB5), 0x5B}), 4);
const QByteArray SecondArray=QByteArray(FirstArray+std::begin<char>({0x18, 0x00, 0x01, static_cast<char>(0x9B), 0x03, 0x09, 0x00, 0x19, static_cast<char>(0x91)}), 13);
qDebug()<< SecondArray.toHex();
return a.exec();
}
我预期的结果:
"a55ab55b1800019b0309001991"
但在输出中我看到:
"a55ab55b1800adbaababababab"
然后我重写第二个QByteArray
初始化,去掉构造函数中的加号操作:
const QByteArray SecondArray=QByteArray(std::begin<char>({static_cast<char>(0xA5), 0x5A, static_cast<char>(0xB5), 0x5B, 0x18, 0x00, 0x01, static_cast<char>(0x9B), 0x03, 0x09, 0x00, 0x19, static_cast<char>(0x91)}), 13);
我得到:
"a55ab55b1800019b0309001991"
为什么第一种情况会发生?如何正确书写?
如评论所述,您正在致电
const QByteArray operator+(const QByteArray &a1, const char *a2)
根据其 documentation:
Returns a byte array that is the result of concatenating byte array a1 and string a2.
除了a2
指向一个以null结尾的字符串。
您可以将串联重新排列为
FirstArray + QByteArray(std::begin<char>({0x18, ......
调用另一个不依赖于 c 字符串空终止的重载。