qt 关于大端小端的一个实验 简单实验

1.概要

起因我用滚动是x86电脑,我用一个usort  a11a ,我期待转换长的char字符应该是这样的“1aa1”,因为x86是小端的,这也是这个16位 类型的实际内存顺序,但是输出的结果是 “a11a”,难道这环境不是小端?难道qt能智能转换?。但结果是QDataStream默认安装大端保存数据。他再小端的环境这样保存数据。我的代码如下

QDataStream out(&block, QIODevice::WriteOnly);
    out<<b;

我还百度上确认这给结果,但结果是否定的,但现象确和我的推论一样。

1.问题呢1:QDataStream 具有自动修正为大端格式的能力吗?

QDataStream 是 Qt 框架中的一个类,用于序列化和反序列化 Qt 数据类型。关于 QDataStream 是否具有自动修正为大端格式的能力,实际上它并不直接“修正”数据的字节序为大端或小端。相反,QDataStream 在序列化和反序列化数据时,会以一种可移植的方式处理数据,以确保在不同的平台上能够一致地读写数据。

QDataStream 在写入数据时,会以一种特定的格式保存数据,这个格式是 Qt 特定的,并不直接对应大端或小端。当在不同平台上读取这些数据时,QDataStream 会根据当前平台的特性(如字节序)来正确解析这些数据。这意味着,无论数据是在大端还是小端机器上生成的,只要使用 QDataStream 进行读取,它都能够正确地还原原始数据。

这种能力并不是通过“修正”字节序来实现的,而是通过一种与平台无关的数据表示方式来实现的。因此,QDataStream 并不直接修改数据的字节序,而是以一种可移植的方式处理数据,以确保数据的一致性和可移植性。

总的来说,虽然 QDataStream 不直接“修正”为大端格式,但它确实提供了一种在不同平台上一致地读写数据的方法。

2.问题2:QDataStream 保存的字节数据都是按照大端保存的吗

QDataStream 保存的字节数据并不总是按照大端(Big-Endian)方式保存。以下是关于 QDataStream 保存字节数据方式的详细解释:

  1. 字节序的灵活性
    QDataStream 在处理多字节数据(大于一个字节的数据)时,确实涉及字节序的问题。字节序,即多字节数据在内存中的存储顺序,有两种方式:Big-Endian(大端)和 Little-Endian(小端)。在 Big-Endian 中,高位字节存储在低地址端,而 Little-Endian 则相反,低位字节存储在低地址端。

  2. QDataStream 的默认行为
    虽然 Big-Endian 是网络传输和文件存储中常见的字节序,但 QDataStream 的设计考虑到了跨平台的兼容性。它并不总是默认按照 Big-Endian 保存数据。实际上,QDataStream 的行为可能受到其设置或 Qt 版本的影响。

  3. 序列化和反序列化
    QDataStream 主要用于对象的序列化和反序列化。序列化是将对象状态转换为可保存或可传输的形式,而反序列化则是相反的过程。在这个过程中,QDataStream 会以一种可移植的方式处理数据,以确保数据在不同的平台和架构上能够一致地读写。

  4. 平台无关性
    重要的是要理解,QDataStream 的目标是提供一种与平台无关的数据读写机制。这意味着,无论数据是在大端机器还是小端机器上生成的,QDataStream 都应该能够正确地读写这些数据。它不是通过强制使用 Big-Endian 或 Little-Endian 来实现这一点,而是通过其内部的数据表示和处理机制来确保数据的一致性和可移植性。

综上所述,不能简单地认为 QDataStream 保存的字节数据都是按照大端保存的。它的设计目标是提供一种跨平台的数据读写解决方案,而不是固定于某一种字节序。在实际应用中,如果需要特定的字节序处理,可能需要在读写数据前进行显式的转换或设置。

2.代码 

#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QIODevice>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QByteArray block;
    unsigned short b = 1;
    char c[2];
    std::memcpy(c, &b, 2);
    for(int i=0;i<sizeof(b);i++){
        int d = c[i];
        qDebug()<<i<<":"<<d;
        //cout<<i<<":"<<d;
    }
    QDataStream out(&block, QIODevice::WriteOnly);
    out<<b;
    char* chars = block.data();
    for(int i=0;i<block.length();i++){
        int d = chars[i];
        //char d = 5;
        qDebug()<<i<<":"<<d;
        //cout<<i<<":"<<d;
    }

    qDebug()<<"hello 大小端实验";
    return a.exec();
}

3.运行结果

0 : 1
1 : 0
0 : 0
1 : 1
hello ��С��ʵ��

4.结果 

 我直接输出的内存顺序和QDataStream处理过的顺序完全不同,也就是说,QDataStream把小端的数据序,变成了大端的数据序。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/774408.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试之接口自动化测试实战(完整版)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 自从看到阿里云性能测试 PTS 接口测试开启免费公测&#xff0c;就想着跟大家分享交流一下如何实现…

使用笔记之-E语言微信支付支付宝支付源代码

首先下载E语言微信支付&支付宝支付源代码 http://www.htsoft.com.cn/download/E_WeiXin_ZhiFuBao_ZhiFu.rar

编译开源车载Linux操作系统AGL

随着汽车行业的智能化和互联化趋势日益明显&#xff0c;车载系统作为汽车的重要组成部分&#xff0c;其性能和功能也受到了越来越多的关注。Linux作为一款开源的操作系统&#xff0c;具有稳定性高、安全性强、可定制性好等优点&#xff0c;因此成为了车载系统领域的热门选择。 …

黄小米-从田间到餐桌的美味之旅

甘肃黄小米颗粒饱满&#xff0c;色泽金黄&#xff0c;富含多种营养成分&#xff0c;如蛋白质、膳食纤维、维生素和矿物质等。其口感香糯&#xff0c;煮粥时香气扑鼻&#xff0c;米油丰富&#xff0c;味道醇厚。由于甘肃地区独特的地理和气候条件&#xff0c;包括充足的日照、较…

SQL 与 NoSQL 数据库:一场关于灵活性与结构的对话

文章目录 引言SQL 数据库&#xff1a;传统之光定义特征优势缺点 NoSQL 数据库&#xff1a;新时代的弹性定义特征优势缺点 何时选择 NoSQL&#xff1f;场景1&#xff1a;海量数据与高并发场景2&#xff1a;灵活性需求场景3&#xff1a;实时数据分析场景4&#xff1a;分布式系统 …

ZW3D二次开发_CAM_设置参数并输出NC文件

ZW3D可以输出NC文件&#xff0c;代码示例如下&#xff1a; int index;int ret cvxCmInqIndexFromName(CM_OUT, (char*)"NC", &index);//获取参数svxNcSetting ncSet;ret cvxCmGetOutputNCSet(index, &ncSet);//设置参数strcpy_s(ncSet.filename, "C:\…

【上海38℃】酷热之下,AI能否给我降降温?

近日上海的高温冲上热搜&#xff0c;要我就早早躲进机房&#xff0c;聆听嘈杂的轰鸣&#xff0c;穿着皮夹克喝着热可可&#xff0c;看着log——以上都是我的白日梦&#xff0c;哈哈哈^ ^) 不过&#xff0c;服务器和工作站确实“真芯热”&#xff0c;尤其是在高负载下&#xff…

【深度学习】图形模型基础(5):线性回归模型第二部分:单变量线性回归模型

1.引言 在统计学与机器学习的广阔领域中&#xff0c;线性回归作为一种基础而强大的预测技术&#xff0c;其核心在于通过输入变量&#xff08;或称预测器、自变量&#xff09;来估计输出变量&#xff08;响应变量、因变量&#xff09;的连续值。本章聚焦于线性回归的一个基本但…

基于SpringBoot的篮球竞赛预约平台

你好&#xff0c;我是计算机学姐码农小野&#xff01;如果你对篮球竞赛预约平台感兴趣或有相关需求&#xff0c;欢迎私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBootMySql 工具&#xff1a; MyEclipse、Tomcat 系统展示…

ros2_control diff_drive_controller

系列文章目录 前言 一、轮式移动机器人运动学 本页介绍不同轮式移动机器人的运动学。如需进一步参考&#xff0c;请参阅 Siciliano et.al - Robotics&#xff1a; 建模、规划和控制》和 Kevin M. Lynch and Frank C. Park - Modern Robotics&#xff1a; 机械、规划和控制》。 …

什么是网络抓取|常见用例和问题

你可能听说过数据被称为现代信息社会的新石油。由于线上信息量庞大&#xff0c;能够有效地收集和分析网页数据已经成为企业、研究人员和开发人员的关键技能。这就是网页抓取技术的用武之地。网页抓取&#xff0c;也称为网页数据提取&#xff0c;是一种强大的技术&#xff0c;能…

配置jupyter时出现问题?怎么办?

在自己创建的虚拟环境&#xff08;nmjpytorch&#xff09;安装完jupyter&#xff0c;没有跳转到链接&#xff0c;问题如图&#xff1a; 解决方法&#xff1a; 1、查看自己的tornado版本为5.1.1&#xff0c;坑太高了&#xff0c;降低版本为4.5.3 2、卸载tornado-5.1.1 3、安装t…

哪些场景下可以更好地使用行列视(RCV)报表工具呢?

行列视产品是我们公司自主研发的一套基于HTML5技术的Excel式web生产报表应用系统&#xff0c;这款产品定位于发电企业生产指标的收集、报表制作和指标报表可视化&#xff0c;是国内首套专业化、自助化、智能化的生产指标管理及分析应用平台。功能强大但是却简单易用。 这款产品…

正确使用Pytorch Geometric打开Cora(Planetoid)数据集

文章目录 关于报错&#xff08;"Cannot connect to host"&#xff09;解决方法 关于报错&#xff08;“Cannot connect to host”&#xff09; 我们在使用PyG调用Planetoid数据集的时候&#xff0c;常会碰到如下报错&#xff1a; 解决方法就是手动下载这个数据集。…

电商价格监测:品牌控价的基石

品牌进行控价的前提是要对电商数据进行高效且准确的监测&#xff0c;倘若数据不准确或者覆盖率欠佳&#xff0c;就会致使控价方向出现偏差。力维网络始终秉持的数据驱动服务原则&#xff0c;唯有做好电商价格监测&#xff0c;提供高准确率的低价数据&#xff0c;方能为品牌控价…

Spring解耦合分析和总结

在我们的日常开发中&#xff0c;创建对象的操作随处可见以至于对其十分熟悉的同时又感觉十分繁琐&#xff0c;每次需要对象都需要亲手将其new出来&#xff0c;甚至某些情况下由于坏编程习惯还会造成对象无法被回收&#xff0c;这是相当糟糕的。但更为严重的是&#xff0c;我们一…

【Python】九种数据类型详讲(内含常见常见的字符串函数汇总)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言Number&#xff08;数字&#xff09;整数类型int &#xff08;整型&#xff0c;长整型&#xff09;float&#xff08;浮点型&#xff09;complex&#xff08;复数&#xff09;…

基于 Transformers库的ResNet扩展

构建自定义模型&#xff1a;基于&#x1f917; Transformers库的ResNet扩展 引言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;&#x1f917; Transformers库已经成为了一个不可或缺的工具&#xff0c;它提供了大量的预训练模型和灵活的API&#xff0c;极大地…

用flutter实现五种寻路算法的可视化效果,快来看看!

前言 半年前我写了一篇《十几种排序算法的可视化效果&#xff0c;快来看看&#xff01;&#x1f440;》&#xff0c;还是很有意思的。这篇文章中的内容还被张风捷特烈张老师收录进了FlutterUnit&#xff1a;《FlutterUnit 周边 | 收录排序算法可视化》。今天让我们再来做一个有…

Postman保存API返回的token以全局使用的整个流程

1、 调通获取token的接口&#xff0c;包含传递参数的类型&#xff0c;和输入密码是否需要md5加密&#xff0c;根据接口的要求&#xff0c;传入数据 2、 查看接口响应的报文&#xff0c;可以看到token的有效时间&#xff0c;token的类型&#xff0c;里面的access_token就是想要获…