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

提问

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

相关推荐
kaixin_learn_qt_ing2 小时前
Qt Model/View
qt
Quz3 小时前
QML MouseArea:鼠标拖拽与滚轮缩放
qt·qml
CHPCWWHSU4 小时前
DeepSeek-Harness-Qt将浏览器端Agent装入桌面应用
开发语言·qt
飘忽不定的bug9 小时前
ubuntu20.04交叉编译QT5.15.12(RK3562+ubuntu20.04)
linux·qt·ubuntu
秋田君11 小时前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt
mengzhi啊11 小时前
QT程序界面自适应1080/2K/4K屏幕。qputenv或者setAttribute
qt
C++ 老炮儿的技术栈11 小时前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
大丑哥1 天前
QT QML 中实现高亮功能
qt
小白不想画工图1 天前
银河麒麟V10系统安装QT5.12
linux·开发语言·qt·银河麒麟
mengzhi啊1 天前
QEventLoop loop配合loop.exec();替代while(1)。电脑cpu占用为0,使用while(1)cpu占用率100%
c++·qt