首页 > 其他分享 >Qt 大小端转换

Qt 大小端转换

时间:2024-03-29 15:11:06浏览次数:26  
标签:小端 存储 转换 Qt -- 鸡蛋 source 大小 字节

  大端模式和小端模式是计算机中经常涉及到的两种字节序,也有大端对齐、小端对齐、大尾、小尾等叫法。

一、起源

  说起这两种模式,就不得不提一下大端(Big-endian)和小端(Little-endian)这两个英文上的起源。

  “endian”一词来源于乔纳森·斯威夫特的小说格列佛游记。Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因:大家都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端(Big-End),可以那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端(Little-End),违令者重罚。然后老百姓对此法令极为反感,期间发生了多次叛乱,其中一个皇帝因此送命,另一个丢了王位,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的,叛乱平息后,就逃到这个帝国避难。据估计,先后几次有11000余人情愿死也不肯去打破鸡蛋较小的端吃鸡蛋。这个其实讽刺当时英国和法国之间持续的冲突。(引自http://blog.csdn.net/ce123_zhouwei/article/details/6971544)其中两种方法吃鸡蛋的人分别被称为Big-endians和Little-endians。1980年,Danny Cohen在其著名的论文”On Holy Wars and a Plea for Peace”中,为平息一场关于字节该以什么样的顺序传送的争论,而引用了该词。

二、存储模式

  接下来就说说为什么会有字节序的问题。

  计算机在存储数据的时候,是以字节(byte)为基本单位来存储的,因此存储单字节类型的数据(比如char)不存在字节序的问题。但存储多字节的数据的时候(比方说4字节的int变量),就涉及到了以一个什么样的顺序来存储。下面举例来说明大端和小端的存储方式。

  定义变量 unsigned long long a=0x1122334455667788

  变量a是一个64位的无符号整数,共需要8个字节来存储,那么在两种模式下是如何存储的呢?

||--1--||--2--||--3--||--4--||--5--||--6--||--7--||--8--|| 地址

|| 11 || 22 || 33 || 44 || 55 || 66 || 77 || 88 || 大端模式

|| 88 || 77 || 66 || 55 || 44 || 33 || 22 || 11 || 小端模式

  从中很容易可以看出各自的存储特点。

三、转换函数及头文件

  大小端API头文件: 

#include <QtEndian>

  常见API如下,详见头文件的描述

  • qToBigEndian(T source)
  • qFromBigEndian(T source)
  • qToLittleEndian(T source)
  • qFromLittleEndian(T source)
  • qToBigEndian(T src, void *dest)
  • qToLittleEndian(T src, void *dest)

 

标签:小端,存储,转换,Qt,--,鸡蛋,source,大小,字节
From: https://www.cnblogs.com/ybqjymy/p/18103904

相关文章

  • QT 自定义插件问题 error: LNK2001: 无法解析的外部符号
    为了重复利用已有的代码,我使用自定义插件进行开发。当每个插件独立开发时没有遇到问题,但是当插件B引用了插件A时就会在编译时报错error:LNK2001:无法解析的外部符号。例如,先定义一个插件ColorPicker,用于颜色选取。关键代码如下:classQDESIGNER_WIDGET_EXPORTColorPicker:......
  • Qt职业之路--成为一名卓越的Qt开发者
    本文翻译自:QtasaCareer–BecomingAStellarQtDeveloper本系列文章中,我们将分享多位Qt从业者的职业发展故事。今天,我要采访的是MikeTrahearn,他是一名资深软件工程师,也是2022年的QtChampion,现居住在澳大利亚昆士兰州阳光明媚的黄金海岸。问:你好,Mike!跟我们介绍一......
  • AIGC、3D模型、轻量化、格式转换、可视化、数字孪生引擎...
    老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自主可控的自动化3D云引擎。平台架构平台特性基于HTML5和WebGL技术,可在主流浏览器上进行快速浏览和调试,支持P......
  • Qt自定义插件写Excel表格
    网上找到一个开源的Qt插件,下载下来,生成头文件和库文件,可以不依赖电脑是否安装Excel软件,是否有Excel驱动,可以直接输出excel文档https://github.com/dbzhang800/QtXlsxWriter/tree/master/src/xlsx#include"CopyAllFileThread.h"#include<QFileInfo>#include"LocalDb.h"#inc......
  • java 16进制转换为ASCII
    /***16进制转换为ASCII**@parambytes源数据*@paramoffset偏移量*@paramlength数据长度*@return{@linkString}*/publicStringconvertHexToAscii(byte[]bytes,intoffset,intlength){StringBuilders......
  • Long long类型比较大小
    long与Longlong类型和Long类型是不一样,long类型属于基本的数据类型,而Long是long类型的包装类。结论long是基本数据类型,判断是否相等时使用==,即可判断值是否相等。(基本数据类型没有equals()方法)。Long是引用数据类型,当其数值在[-128,127]之间时,用==判断是否相等,亦可用......
  • 【编程基础】进制之间的转换
    前言:文本推荐阅读时间20-30mins。详细讲解进制之间转换的原理。让你知其然,知其所以然。目录1.十进制、二进制、八进制、十六进制 符号反应权重符号所在的位置也反应权重为什么人类会发明十进制推广到r进制计数法2.其他进制转换成十进制记住每一位的位权3.二进制,八......
  • Qt5.14.2 无所不能的Qt数据库操作之旅
    身为程序员,数据库无疑是我们最为亲密无间的好伙伴。但如何高效地操作数据库,却一直是一个令人颇感棘手的难题。不过,没关系,我们的Qt大神们早已为此开辟出一条华丽绝伦的大道,就让我带你一览他们的绝世数据库操作艺术吧!一、查询驱动,方能驱车万里在对数据库开展操作之前,我......
  • Qt5.14.2论Qt大神如何华丽操控计算机系统
    身为一名程序员,难免要与计算机系统打交道。而要想高效地和系统沟通、指挥它为我们工作,最好的办法莫过于拥有一个强大的跨平台开发框架了。今天,就让我们一同领略Qt大神如何在此领域内驰骋自如,优雅地操控系统完成各种任务吧!第一弹:潜力无限,Qt大神从获取信息开始作为系统......
  • IDEA 代码字体大小 及 注释颜色 样式设置
    【本篇文章 参照的IDEA版本为2020】单击进入Settings【注释样式设置】按照1 2 3 4顺序找到注释的设置 功能作用详情见下图↓(也可以通过搜索框搜索)DIY颜色样本如下【代码字体大小设置】也在Editor里面 能找到上面的 就能看见这个font  一样的......