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
的则是小端模式。
理解可能有问题的地方
0x12 34 56 78
共4个字节,每个字节大端和小端存的都是一样的,这个没什么区别,意思是0x78的十六进制,同样都是以0b0111 1000二进制的存放方法,不会说大端模式就0001 1110这样存的,不是这个意思,大小端区别是按字节为单位判断的。- 有些人可能理解了十六进制
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次了,最近回想一下发现我竟然又忘了!所以特以此文来记录一下。 环境 Qt…...

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

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

【C++】—— 多态常见的笔试和面试问题
序言: 在上期,我们对多态进行了详细的讲解。本期,我给大家带来的是关于有关多态常见的笔试和面试问题,帮助大家理解记忆相关知识点。 目录 (一)概念查考 (二)问答题 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大模型不断涌现,一时不知如何挑选&…...
【springboot】RestTemplate配置HttpClient连接池
在Java开发中,访问第三方HTTP协议的网络接口,通常使用的连接工具为JDK自带的HttpURLConnection、HttpClient(现在应该称之为HttpComponents)和OKHttp。 这些Http连接工具,使用起来都比较复杂,如果项目中使…...

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

java后端富文本转word,再传递到浏览器下载。
思路参考,以及所有的工具类都使用了》牧羊人大佬的代码《 有帮助的话不用给到我点赞,给大佬点赞即可 这是前端代码,必须使用get。 post后端返回的流浏览器接收不到(具体原因不详)。get无法传递requestBody,…...

【动态规划算法】-回文串问题题型(34-40题)
💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …...

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

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

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

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

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

【物联网】DMA传输原理与实现详解(超详细)
DMA(Direct Memory Access,直接内存访问)是一种计算机数据传输方式,允许外围设备直接访问系统内存,而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段:数据传输阶段: Part 2: DMA数据…...

Java类集框架(二)
目录 1.Map(常用子类 HashMap,LinkedHashMap,HashTable,TreeMap) 2.Map的输出(Map.Entry,iterator,foreach) 3.数据结构 - 栈(Stack) 4.数据结构 - 队列(Q…...

爬虫008_流程控制语句_if_if else_elif_for---python工作笔记026
然后我们再来看一下这里的,判断,可以看到 再看一个判断,这里的布尔类型 第二行有4个空格,python的格式 注意这里,输入的age是字符串,需要转一下才行 int可以写到int(intput("阿斯顿法师打发地方")) 这样也可以...

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

7_分类算法—逻辑回归
文章目录 逻辑回归:1 Logistic回归(二分类问题)1.1 sigmoid函数1.2 Logistic回归及似然函数(求解)1.3 θ参数求解1.4 Logistic回归损失函数1.5 LogisticRegression总结 2 Softmax回归(多分类问题࿰…...

【计算机网络】应用层协议 -- DNS协议
文章目录 1. DNS背景2. 域名简介3. 域名解析过程4. 使用dig查看DNS过程 1. DNS背景 DNS(Domain Name System,域名系统)协议,是一个用来将域名转化为IP地址的应用层协议。 TCP/IP当中通过IP地址和端口号的方式,来确定…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...