qt-通信协议基础-uint64_t转QByteArray-小端系统

示例代码

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

互动

qt-uint64_t转QByteArray小端字节序并指定长度-小端系统

相关推荐
a努力。5 小时前
得物Java面试被问:Netty的ByteBuf引用计数和内存释放
java·开发语言·分布式·python·面试·职场和发展
zyxzyx495 小时前
大模型本地化部署实战:从服务器性能调优到低成本落地全攻略
服务器·开发语言·php
雾岛听蓝5 小时前
AVL树实现
开发语言·c++
大只鹅5 小时前
Java集合框架-Collection
java·开发语言
小冷coding5 小时前
【Java】基于Java的线上贷款分发业务技术栈设计方案
java·开发语言
星火开发设计5 小时前
循环结构进阶:while 与 do-while 循环的适用场景
java·开发语言·数据结构·学习·知识·循环
郝学胜-神的一滴5 小时前
Qt自定义TabWidget:实现左侧标签与水平文本布局
开发语言·c++·qt·程序人生
计算机程序设计小李同学5 小时前
基于JavaServer Pages(JSP)技术开发的食谱分享平台
java·开发语言
划水的code搬运工小李5 小时前
VOFA修改数据解析GPCHC
开发语言·qt
cjp5605 小时前
019.C#管道服务,两软件间用json数据交互
开发语言·c#·json