当前位置: 首页 > news >正文

C++ 关于大端模式和小端模式的简析

大端及小端的简析

  • 序言
  • 环境
  • 概念
  • 理解可能有问题的地方
  • 一般情况下需要注意的大小端情况
  • 关于大小端相关的实用函数/代码
    • 判断自身大小端的代码
    • 大小端转换函数

序言

我记得我已经查过4次了,最近回想一下发现我竟然又忘了!所以特以此文来记录一下。

环境

Qt5.14.2 MSVC2017 64bit(VS2019)

概念

在计算机系统中,计算机存储单元是字节“byte”,在内存中存储的顺序就成了绕不开的问题,也就出现了大端模式和小端模式,为什么会有这两种模式呢?

大端模式是更符合人理解的模式,且符号位在所表示数据内存的第一个字节中,便于快速判断数据的正负和大小。
小端模式是更符合机器性能的模式,CPU做数值运算时从内存中按顺序依次从低位到高位取数据进行运算,直到最后刷新最高位的符号位,这样的运算方式会更高效;内存的低地址处存放低字节,所以在强制转换数据时不需要调整字节的内容。

大端模式(Big-endian):高位字节存低位地址,低位字节存高位地址
小端模式(Little-endian):低位字节存低位地址,高位字节存高位地址

举个例子:
数值: 0x12345678
存的内存位置:0x000000D3B8EFF254 ~ 0x000000D3B8EFF257
大端在内存中分别存的:12 34 56 78
小端在内存中分别存的:78 56 34 12

0x12 34 56 78,其高位字节就是越左越高,低位字节就是越右越低;
0x000000D3B8EFF254 ~ 0x000000D3B8EFF257,其高位地址就是数值越高就高,其低位地址就是数值越低就低;

0x000000D3B8EFF254低位地址里,存储0x12的则是大端模式,存储0x78的则是小端模式。

理解可能有问题的地方

  1. 0x12 34 56 78共4个字节,每个字节大端和小端存的都是一样的,这个没什么区别,意思是0x78的十六进制,同样都是以0b0111 1000二进制的存放方法,不会说大端模式就0001 1110这样存的,不是这个意思,大小端区别是按字节为单位判断的。
  2. 有些人可能理解了十六进制0x12345678为例子时的大小端情况,就不清楚十进制ulong,char数组,std::string等非十六进制情况时大小端情况,如果有这种疑惑说明你对数据的本质不清楚,这些在内存中存放的实质上就是一个个组合成的二进制数或者是十六进制数,字母可以用ASCII对照转换成十六进制数,中文字符可以用Unicode来对照转换成十六进制数。

一般情况下需要注意的大小端情况

TCP/IP协议规定必须采用网络字节顺序NBO(Network Byte Order),即大端模式。
而主机字节顺序(HBO,Host Byte Order)则看所在的CPU处理器及编译器才能确定,而不是看操作系统。

但是普遍常见的CPU是小端模式

关于大小端相关的实用函数/代码

判断自身大小端的代码

union myunion
{int a;char b;
};// 如果是小端模式则返回1,大端模式则返回0
bool is_little_endian(void)
{union myunion u1;u1.a = 0x12345678;				// 地址0的那个字节内是0x78(小端)或者0x12(大端)if(0x78 == u1.b)return true;else if(0x12 == u1.b)return false;
}

大小端转换函数

头文件:
windows:	#include <WinSock2.h>
linux:		#include <arpa/inet.h>1)htonl-》Host to Network Long函数原型:uint32_t htonl (uint32_t hostlong)
函数返回值:是一个32位的网络字节顺序。
函数的作用:是将一个32位数从 主机字节顺序 转换成 网络字节顺序。注:无符号的长整型 在 32位的系统是 4字节。2)htons函数原型:uint16_t htons (uint16_t hostshort)
函数返回值:是一个16位的网络字节顺序。
函数的作用:是将一个16位数从 主机字节顺序 转换成 网络字节顺序。注:无符号的短整型 在 32位的系统是 2字节。3)ntohl Network to Host Long函数原型是:uint32_t ntohs (uint32_t netlong)
函数返回值:是一个32位的主机字节顺序。
函数的作用:是将一个32位数由 网络字节顺序 转换为 主机字节顺序。4)ntohs 函数原型是:uint16_t ntohs (uint16_t netshort)
函数返回值:是一个16位的主机字节顺序。
函数的作用:是将一个16位数由 网络字节顺序 转换为 主机字节顺序。等...

因个人尚未读到这些函数的源码,所以只清楚上述的函数中是知道主机字节顺序是小端的,不确定自身CPU如果是大端模式会不会自行判断。

相关文章:

C++ 关于大端模式和小端模式的简析

大端及小端的简析 序言环境概念理解可能有问题的地方一般情况下需要注意的大小端情况关于大小端相关的实用函数/代码判断自身大小端的代码大小端转换函数 序言 我记得我已经查过4次了&#xff0c;最近回想一下发现我竟然又忘了&#xff01;所以特以此文来记录一下。 环境 Qt…...

嵌入式:C高级 Day2

一、递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 二、递归实现&#xff0c;输入一个数字&#xff0c;输出这个数的二进制 三、写一个脚本&#xff0c;包含以下内容 1.显示/etc/group文件中第五行的内容 2.创建目录/home/ubuntu/copy 3.切换工作路径到此目录…...

iPhone 7透明屏的显示效果怎么样?

iPhone 7是苹果公司于2016年推出的一款智能手机&#xff0c;它采用了4.7英寸的Retina HD显示屏&#xff0c;分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的&#xff0c;但是苹果公司在设计上采用了一些技术&#xff0c;使得用户在使用iPhone 7时可以有一种透明的感觉…...

【C++】—— 多态常见的笔试和面试问题

序言&#xff1a; 在上期&#xff0c;我们对多态进行了详细的讲解。本期&#xff0c;我给大家带来的是关于有关多态常见的笔试和面试问题&#xff0c;帮助大家理解记忆相关知识点。 目录 &#xff08;一&#xff09;概念查考 &#xff08;二&#xff09;问答题 1、简述一下…...

探寻AI大模型平台之巅——文心千帆

目录 前言1. 何为文心千帆2. 核心亮点2.1 第三方大模型2.2 Prompt模板2.3 安全可靠 3. 一站式服务3.1 数据管理3.2 数据标注3.3 数据处理3.4 数据训练3.5 模型纳管3.5.1 模型评估3.5.2 模型压缩 3.6 服务发布 总结 前言 众多AI大模型不断涌现&#xff0c;一时不知如何挑选&…...

【springboot】RestTemplate配置HttpClient连接池

在Java开发中&#xff0c;访问第三方HTTP协议的网络接口&#xff0c;通常使用的连接工具为JDK自带的HttpURLConnection、HttpClient&#xff08;现在应该称之为HttpComponents&#xff09;和OKHttp。 这些Http连接工具&#xff0c;使用起来都比较复杂&#xff0c;如果项目中使…...

MySQL内置函数使用说明

MySQL函数使用说明 MySQL 是一个流行的关系型数据库管理系统&#xff0c;它提供了许多内置函数来处理和操作数据。这些函数可以简化数据库查询和操作的过程&#xff0c;提高代码的可读性和效率。以下是一些常见的 MySQL 内置函数及其使用说明和示例。 数值函数 ABS() 函数原…...

java后端富文本转word,再传递到浏览器下载。

思路参考&#xff0c;以及所有的工具类都使用了》牧羊人大佬的代码《 有帮助的话不用给到我点赞&#xff0c;给大佬点赞即可 这是前端代码&#xff0c;必须使用get。 post后端返回的流浏览器接收不到&#xff08;具体原因不详&#xff09;。get无法传递requestBody&#xff0c;…...

【动态规划算法】-回文串问题题型(34-40题)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …...

STM32基础回顾

文章目录 单片机编程的原理GPIO中断EXTI外部中断定时器中断、串口中断 定时器定时器中断配置过程通用定时器输出比较功能&#xff1a;PWM波的生成定时器的输入捕获功能主从触发模式PWMI模式 定时器的编码器接口 DMA简介通信接口USART软件配置流程&#xff1a;1、仅发数据的配置…...

如何解决电脑无声问题:排除故障的几种常见方法

大家好&#xff0c;今天我们来讨论一下处理电脑没有声音的故障。当你突然发现电脑静音无声时&#xff0c;需要逐步排除可能的问题&#xff0c;但总体而言&#xff0c;声音故障是相对容易解决的。接下来&#xff0c;我们将介绍一些排除电脑无声问题的方法。 第一步&#xff1a;…...

Apache RocketMQ 命令注入

漏洞简介 RocketMQ 5.1.0及以下版本&#xff0c;在一定条件下&#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露&#xff0c;缺乏权限验证&#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令…...

二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)

文章目录 算法模板Dijkstra题目代码模板朴素dijkstra算法堆优化版dijkstra 树与图的存储(1) 邻接矩阵&#xff1a;(2) 邻接表&#xff1a;关于e[],ne[],h[]的理解 关于堆的原理与操作 模板题Dijkstra求最短路 I原题链接题目思路题解 Dijkstra求最短路 II原题链接题目思路题解 1…...

ROS2学习(四)进程,线程与节点的关系

节点与节点执行器 节点&#xff0c;英文是node,在ROS2中&#xff0c;节点是一个抽象的实体&#xff0c;它可以代表某种或某类特定功能的抽象集合体&#xff0c;它可以存在于进程中&#xff0c;也可以存在于线程中。所有ROS2的基础功能最基础的载体是节点&#xff0c;所有的通信…...

【物联网】DMA传输原理与实现详解(超详细)

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09;是一种计算机数据传输方式&#xff0c;允许外围设备直接访问系统内存&#xff0c;而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段&#xff1a;数据传输阶段&#xff1a; Part 2: DMA数据…...

Java类集框架(二)

目录 1.Map&#xff08;常用子类 HashMap&#xff0c;LinkedHashMap&#xff0c;HashTable&#xff0c;TreeMap&#xff09; 2.Map的输出&#xff08;Map.Entry,iterator,foreach&#xff09; 3.数据结构 - 栈&#xff08;Stack&#xff09; 4.数据结构 - 队列&#xff08;Q…...

爬虫008_流程控制语句_if_if else_elif_for---python工作笔记026

然后我们再来看一下这里的,判断,可以看到 再看一个判断,这里的布尔类型 第二行有4个空格,python的格式 注意这里,输入的age是字符串,需要转一下才行 int可以写到int(intput("阿斯顿法师打发地方")) 这样也可以...

【随笔】五周年创作纪念日

今天收到了 CSDN 的创作五周年提示&#xff0c;正好前几天&#xff08;7.31&#xff09;我也成功申请了 CSDN 博客专家&#xff0c;趁这个机会分享一下这几年写博客的感受吧 机缘 关注我比较久的读者应该知道我是从学传统工科半路出家搞计算机的&#xff0c;这里的经历还是比…...

7_分类算法—逻辑回归

文章目录 逻辑回归&#xff1a;1 Logistic回归&#xff08;二分类问题&#xff09;1.1 sigmoid函数1.2 Logistic回归及似然函数&#xff08;求解&#xff09;1.3 θ参数求解1.4 Logistic回归损失函数1.5 LogisticRegression总结 2 Softmax回归&#xff08;多分类问题&#xff0…...

【计算机网络】应用层协议 -- DNS协议

文章目录 1. DNS背景2. 域名简介3. 域名解析过程4. 使用dig查看DNS过程 1. DNS背景 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&#xff0c;是一个用来将域名转化为IP地址的应用层协议。 TCP/IP当中通过IP地址和端口号的方式&#xff0c;来确定…...

Paper2Slides API深度解析:FastAPI后端架构与RESTful接口设计终极指南

Paper2Slides API深度解析&#xff1a;FastAPI后端架构与RESTful接口设计终极指南 【免费下载链接】Paper2Slides "Paper2Slides: From Paper to Presentation in One Click" 项目地址: https://gitcode.com/gh_mirrors/pap/Paper2Slides Paper2Slides是一个革…...

从Harness工程视角深度解读Claude Code源码,AI编码Agent的工业级实现逻辑

2026年3月底&#xff0c;Anthropic旗下命令行编码Agent工具Claude Code&#xff0c;因npm发布包中的source map文件意外暴露存储在官方R2存储桶内的未混淆源码&#xff0c;让外界首次得以窥见工业级AI Agent系统的真实架构。这份超过51万行TypeScript代码的工程样本&#xff0c…...

FireRedASR-AED-L模型Node.js后端调用实战:构建高并发语音处理API

FireRedASR-AED-L模型Node.js后端调用实战&#xff1a;构建高并发语音处理API 语音转文字的需求现在越来越普遍&#xff0c;从会议记录到客服录音分析&#xff0c;到处都能用上。如果你手头有一个像FireRedASR-AED-L这样强大的语音识别模型服务&#xff0c;怎么把它集成到你的…...

GPU显存友好!Ostrakon-VL-8B Bfloat16加速部署详解

GPU显存友好&#xff01;Ostrakon-VL-8B Bfloat16加速部署详解 1. 项目背景与核心价值 Ostrakon-VL-8B是一款专为零售与餐饮场景优化的多模态大模型&#xff0c;能够高效处理商品识别、货架分析等视觉任务。传统部署方案往往面临显存占用高、推理速度慢的问题&#xff0c;而本…...

Nano-Banana企业级部署:支持API接入PLM系统,打通产品数据链路

Nano-Banana企业级部署&#xff1a;支持API接入PLM系统&#xff0c;打通产品数据链路 1. 引言&#xff1a;企业级部署的价值与意义 在现代制造业和设计行业中&#xff0c;产品数据管理一直是个令人头疼的问题。设计师创作的产品分解图、技术团队制作的结构示意图、营销部门需…...

Qwen-Image-Edit-2511商业落地:快速生成产品设计图,提升工作效率

Qwen-Image-Edit-2511商业落地&#xff1a;快速生成产品设计图&#xff0c;提升工作效率 1. 产品设计效率的革命性提升 在当今快节奏的商业环境中&#xff0c;产品设计团队面临着前所未有的压力&#xff1a;需要在更短时间内交付更多设计方案&#xff0c;同时保持高质量和创新…...

如何用 Claude Code 快速完善接口文档和注释

在大多数项目中&#xff0c;代码本身并不是最大的问题。 真正让人头疼的是&#xff1a;没有文档&#xff0c;没有注释。常见情况包括&#xff1a; 接口没有说明&#xff0c;不知道怎么用方法没有注释&#xff0c;看不懂意图参数含义不清晰&#xff0c;只能靠猜老项目完全没有文…...

解决Xcode真机调试常见问题:App ID限制与证书信任错误处理

Xcode真机调试全攻略&#xff1a;突破App ID限制与证书信任难题 1. 引言&#xff1a;为什么开发者需要掌握无证书调试&#xff1f; 在iOS开发过程中&#xff0c;真机调试是不可或缺的环节。然而&#xff0c;传统的证书配置流程繁琐复杂&#xff0c;尤其是对于独立开发者或小型…...

MQ之KAFKA (broker 高可用)

Kafka KRaft 核心知识点(面试+生产极简版) KRaft(Kafka Raft):Kafka 2.8+ 引入、3.3+ 生产可用,完全替代 Zookeeper 的内置元数据一致性协议(基于 Raft)。 一句话背诵 内置 Raft、无 ZK、元数据自管理、选举更快、吞吐更高、架构极简。 1. 核心概念(必背) Control…...

飞书机器人集成实战:OpenClaw+Phi-3-vision-128k-instruct打造智能问答助手

飞书机器人集成实战&#xff1a;OpenClawPhi-3-vision-128k-instruct打造智能问答助手 1. 为什么选择这个技术组合&#xff1f; 上周我接到一个产品经理的需求——希望能通过飞书直接发送产品截图&#xff0c;自动获得功能分析报告。传统方案需要开发整套服务端逻辑&#xff…...