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

相关推荐
审判长烧鸡几秒前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~26 分钟前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_6181 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift
一楼的猫1 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作
程序leo源1 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
likerhood2 小时前
Java static 关键字从浅入深
java·开发语言
猫猫的小茶馆2 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
计算机安禾2 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++
_院长大人_2 小时前
Java Excel导出:如何实现自定义表头与字段顺序的完全控制
java·开发语言·后端·excel
我在人间贩卖青春2 小时前
重学Qt——事件处理
qt