qt-通信协议基础-QStirng转QByteArray-进阶操作

使用场景

对于普通的场景,没有什么进阶要求。当然如果,你依然想要处于一个小白阶段,或者代码初级阶段,那也不需要了解!!

这里写出来仅仅是给那些需要的,或者需要跨过小白阶段的程序员。

写代码,不是靠走马观花完成的,不是我们想到哪就走到哪,总想着凑合着用,那只会让未来的你自食其果。何为积屎成山,还是自己都不愿意搬的屎山。不留后路就是屎山。

前期我们讲过,QString转QByteArray,不需要处理字节序的问题。那么是否我们就只需要直接填写,就高枕无忧了?

看看进阶版本,思考思考吧。

进阶版本:可选字节序转换

c 复制代码
QByteArray doubleToQByteArray(double value, bool bigEndian) {
    union {
        double d;
        quint64 i;
    } converter;
    converter.d = value;
    QByteArray bytes;
    bytes.resize(8);
    if (bigEndian) {
        // 大端序:高位在前
        bytes[0] = (converter.i >> 56) & 0xFF;
        bytes[1] = (converter.i >> 48) & 0xFF;
        bytes[2] = (converter.i >> 40) & 0xFF;
        bytes[3] = (converter.i >> 32) & 0xFF;
        bytes[4] = (converter.i >> 24) & 0xFF;
        bytes[5] = (converter.i >> 16) & 0xFF;
        bytes[6] = (converter.i >> 8)  & 0xFF;
        bytes[7] = converter.i        & 0xFF;
    } else {
        // 小端序:低位在前
        bytes[7] = (converter.i >> 56) & 0xFF;
        bytes[6] = (converter.i >> 48) & 0xFF;
        bytes[5] = (converter.i >> 40) & 0xFF;
        bytes[4] = (converter.i >> 32) & 0xFF;
        bytes[3] = (converter.i >> 24) & 0xFF;
        bytes[2] = (converter.i >> 16) & 0xFF;
        bytes[1] = (converter.i >> 8)  & 0xFF;
        bytes[0] = converter.i        & 0xFF;
    }
    return bytes;
}

qt-union-联合体基础讲解

提问

优秀的代码,往往在于合理做出扩展性。你是否想过,让它变的大小自动调整,而不是设定大小!

相关推荐
马里马里奥-16 小时前
从零搭建AI Agent工具链的技术文章大纲
开发语言·qt
Quz20 小时前
QML 与 JavaScript 交互方式:内联函数、外部文件、信号槽与工作线程
javascript·qt
Quz20 小时前
QML ToolTip 组件:延迟提示与自定义外观
qt
wWYy.20 小时前
RPC详解
qt·rpc·php
Fu_Lin_21 小时前
Qt嵌入式从零基础到精通(01):Qt嵌入式开发全景图:从桌面Qt到ARM Linux
linux·arm开发·qt·qt5·嵌入式linux
海清河晏1111 天前
Qt实战:从零构建美化登录界面
开发语言·c++·qt
Fu_Lin_1 天前
《Qt嵌入式从零基础到精通》前言与阅读指南
开发语言·qt
Eason_CM1 天前
QT学习教程与实战三:控件与QT Designer
c++·windows·qt·visual studio
mabing9932 天前
Qt 生成条纹图
开发语言·qt
Fu_Lin_2 天前
Qt 嵌入式从零基础到精通总纲
开发语言·qt·嵌入式·qt嵌入式