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小端字节序并指定长度-小端系统

相关推荐
似水明俊德3 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
Thera7774 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚5 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon5 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头5 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141595 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
Moksha2625 小时前
5G、VoNR基本概念
开发语言·5g·php
jzlhll1235 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin
W.D.小糊涂5 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库
用头发抵命6 小时前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript