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-联合体基础讲解

提问

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

相关推荐
C++ 老炮儿的技术栈10 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
我不是疯子是傻子14 小时前
Qt 实时曲线卡顿优化:从QPainter到OpenGL的3级加速实战
开发语言·qt
秋田君15 小时前
QT_XML文件操作
xml·数据库·qt
我不是疯子是傻子16 小时前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆16 小时前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt
艾莉丝努力练剑20 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
秋田君2 天前
QT_JSON文件操作
开发语言·qt·json
大白同学4212 天前
初识Qt——信号和槽
开发语言·qt
秋田君2 天前
QT_INI文件操作
开发语言·qt
≮傷£≯√2 天前
FFmpeg + qt 音频播放
qt·ffmpeg·音视频