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.mzph.cn/pingmian/41308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorBoard进阶

文章目录 TensorBoard进阶1.设置TensorBoard2.图像数据在TensorBoard中可视化3.模型结构在TensorBoard中可视化&#xff08;重点✅&#xff09;4.高维数据在TensorBoard中低维可视化5.利用TensorBoard跟踪模型的训练过程&#xff08;重点✅&#xff09;6.利用TensorBoard给每个…

complex复数库学习

此头文件是数值库的一部分。本篇介绍complex的基本用法。 常用的API如下&#xff1a; 运算 real 返回实部 (函数模板) imag 返回虚部 (函数模板) abs(std::complex) 返回复数的模 (函数模板) arg 返回辐角 (函数模板) norm 返回模(范数)的平方 (函数模板) conj 返回复共轭 (函…

桌面保存的Word文件删除怎么找回?超实用的三个方法?

在日常工作和学习中&#xff0c;我们经常会使用Word文档进行文字编辑和文件保存。但是&#xff0c;有时由于操作失误或系统故障&#xff0c;我们会不小心将存放在电脑桌面重要的Word文件删除了。导致无法挽回的损失&#xff0c;但幸运的是&#xff0c;有一些方法可以帮助我们找…

源代码防泄漏的制胜法宝——沙箱

沙箱技术作为现代信息安全领域的一种重要手段&#xff0c;其在源代码防泄密方面的应用愈发受到业界的关注。源代码作为企业或组织的核心资产&#xff0c;一旦泄露&#xff0c;不仅可能导致知识产权的流失&#xff0c;还可能对企业运营造成重大影响。因此&#xff0c;利用沙箱技…

Dark Brandon是什么梗:中英双语介绍

中文版 “Dark Brandon”是一个互联网梗和社交媒体现象&#xff0c;涉及到美国总统乔拜登的公众形象。这个梗通过呈现一个虚构的、往往是幽默的拜登形象&#xff0c;把他描绘成一个狡猾而强大的角色&#xff0c;与他平常的公众形象形成对比。以下是“Dark Brandon”梗的背景和…

跨境干货|最新注册Google账号方法分享

谷歌账号对做跨境外贸业务的人来说是刚需&#xff0c;目前来说大部分的海外社媒平台、工具都可以用谷歌账号来注册。但是仍然有很多朋友并不知道如何注册这个谷歌账号&#xff0c;今天就来给大家分享2个注册谷歌账号的方法&#xff0c;一个是手机号注册&#xff0c;一个是如何跳…

面向对象案例:电影院

TOC 思路 代码 结构 具体代码 Movie.java public class Movie {//一共七个private int id;private String name;private double price;private double score;private String director;private String actors;private String info;//get和setpublic int getId() {return id;…

opencv概念以及安装方法

#opencv相关概念介绍 Open Source Computer Vision Library 缩写 opencv 翻译&#xff1a;开源的计算机视觉库 &#xff0c;英特尔公司发起并开发&#xff0c;支持多种编程语言&#xff08;如C、Python、Java等&#xff09;&#xff0c;支持计算机视觉和机器学习等众多算法&a…

如何让自动化测试更加灵活简洁?

简化的架构对于自动化测试和主代码一样重要。冗余和不灵活性可能会导致一些问题&#xff1a;比如 UI 中的任何更改都需要更新多个文件&#xff0c;测试可能在功能上相互重复&#xff0c;并且支持新功能可能会变成一项耗时且有挑战性的工作来适应现有测试。 页面对象模式如何理…

DataWhale-吃瓜教程学习笔记 (七)

学习视频**&#xff1a;第6章-支持向量机_哔哩哔哩_bilibili 西瓜书对应章节&#xff1a; 第六章 支持向量机 - 算法原理 几何角度 对于线性可分数据集&#xff0c;找距离正负样本距离都最远的超平面&#xff0c;解是唯一的&#xff0c;泛化性能较好 - 超平面 - 几何间隔 例…

PostgreSQL批量向表中插入数据

PostgreSQL批量向表中插入数据 在 PostgreSQL 中&#xff0c;可以使用 PL/pgSQL 脚本通过 BEGIN … FOR … LOOP 语句来批量插入数据。这个方法非常适合需要编写过程逻辑来批量插入数据的场景。在这个例子中&#xff0c;我将演示如何使用一个循环从 1 到 10000&#xff0c;向表…

Leetcode秋招冲刺(专题13--15)

专题13&#xff1a;广度优先搜索 题目559&#xff1a;N叉树的最大深度&#xff08;YES&#xff09; 解题思路&#xff1a;使用广度优先搜索&#xff0c;广度优先搜索的核心就是使用队列queue存储每个根节点&#xff0c;然后再存储孩子节点。 给定一个 N 叉树&#xff0c;找到…

MSPM0G3507——读取引脚的高低电平方法(数字信号循迹模块)

SYSCFG配置 代码部分 //第一个传感器if( DL_GPIO_readPins(xunji_PORT_PIN1_PORT , xunji_PORT_PIN1_PIN )xunji_PORT_PIN1_PIN) //黑&#xff0c;不亮 高{a1;}if( DL_GPIO_readPins(xunji_PORT_PIN1_PORT , xunji_PORT…

每周算法(week2)【leetcode11~30】

前言 本该两周完成的30道算法题没想到5天就完成了&#xff0c;接下来继续刷算法&#xff0c;保持手感&#xff0c;对不熟悉的基础算法二分、搜索还得继续练。 leetcode 编号完成时间复习时间11. 盛水最多的容器2024-07-0212. 整数转罗马数字2024-07-0213. 罗马数字转整数2024-…

计算机大方向的选择

选专业要了解自己的兴趣所在。 即想要学习什么样的专业&#xff0c;如果有明确的专业意向&#xff0c;就可以有针对性地选择那些专业实力较强的院校。 2.如果没有明确的专业意向&#xff0c;可以优先考虑一下院校。 确定一下自己想要选择综合性院校还是理工类院校或是像财经或者…

从 Keycloak 导出和导入 Realm 和用户

1. 首先对keycloak 命令有所了解 需要将 Keycloak 中的 Realm 导出或导入时&#xff0c;您可以使用 JSON 文件进行操作。以下是一些有关导出和导入 Realm 的方法&#xff1a; 导出 Realm 到目录&#xff1a; 使用 export 命令将 Realm 导出到目录。在执行此命令时&#xff0c;…

技术分享:直播平台如何开发并接入美颜SDK

本篇文章&#xff0c;笔者将分享直播平台如何开发并接入美颜SDK的技术细节与步骤。 一、选择合适的美颜SDK 首先&#xff0c;选择一款适合的美颜SDK非常重要。市面上有很多优秀的美颜SDK供应商&#xff0c;选择时应考虑以下因素&#xff1a; 功能丰富性&#xff1a;支持美白…

短视频文案提取神器怎么提取抖音视频文案!

很多编导以及视频内容创作者为了提高自己的工作效率还会使用视频转文字提取神器&#xff0c;我们都清楚短视频领域每个平台人群熟悉都有所不同&#xff0c;在分发内容的时候也会调整内容已符合平台属性。 短视频文案提取神器怎么提取抖音视频文案 短视频常见的平台有抖音、西瓜…

linux ifconfig未找到命令

linux ifconfig未找到命令 1、使用yum安装net-tools yum install net-toolsyum报未找到命令请查看文章vim未找到命令&#xff0c;且yum install vim安装vim失败 2、安装后使用ifconfig命令 ifconfig

windows实现Grafana+Loki+loki4j轻量级日志系统,告别沉重的ELK

文章目录 Loki下载Loki下载安装Loki添加Loki数据源springboot日志推送 Loki下载 下载地址&#xff1a;https://github.com/grafana/loki/releases/ 找到loki-windows-amd64.exe.zip点击开始下载&#xff0c;我这里下载的2.9.9版本 Loki下载 下载地址&#xff1a;https://gr…