示例代码
在C++中,将uint64_t转换为QByteArray且不考虑大小端字节序的正确实现如下:
cpp
#include <QCoreApplication>
#include <QByteArray>
#include <QDebug>
#include <cstring> // 用于memcpy
QByteArray uint64ToQByteArray(uint64_t value) {
QByteArray bytes;
bytes.resize(sizeof(value)); // 设置为8字节
// 使用memcpy直接复制内存内容(保持系统默认字节序)
std::memcpy(bytes.data(), &value, sizeof(value));
return bytes;
}
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
uint64_t testValue = 0x123456789ABCDEF0;
QByteArray result = uint64ToQByteArray(testValue);
qDebug() << "Hex representation:" << result.toHex();
qDebug() << "Raw bytes:" << result;
return a.exec();
}
关键点解析
字节序无关性:
使用memcpy直接复制内存内容,结果字节序与当前系统字节序一致。
若系统是小端,则0x123456789ABCDEF0会存储为F0 DE BC 9A 78 56 34 12(小端序)。
若系统是大端,则存储为12 34 56 78 9A BC DE F0(大端序)。
长度处理
默认生成8字节的QByteArray,与uint64_t内存占用一致。
若需调整长度,可通过bytes.resize(targetLength)扩展或截断,但需注意扩展时填充位置(前端/后端)和填充值(如0x00)。