大小端字节序 和 内存高低地址顺序
目录
1. 大小端字节序
1.1 什么是大小端字节序?
1.2 为什么有大小端字节序?
1.3 习题:用程序结果判断大端小端
2. 各种易混淆的高低地址顺序
2.1 监视窗口的地址表示【计算机标准展示方式】
2.2 横向地址表示
2.3 一个字节 与 多个字节 的地址顺序区别
2.4 内存空间的开辟顺序
3. 判断练习
1. 大小端字节序
1.1 什么是大小端字节序?
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题。按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:
- 大小端描述的对象是低位字节
- ⼤端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,⽽数据的高位字节内容,保存在内存的低地址处。(低位数——高地址)
- 小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。(低位数——低地址)
假设现在有一个int型大小的16进制数0x11223344,它在小端序和大端序是下面这样的:

Visual Studio 2022采用的是小端字节序存储。
代码演示:
int main()
{int a = 0x11223344; return 0;
}

1.2 为什么有大小端字节序?
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8 bit 位,但是在C语⾔中除了8 bit 的 char 之外,还有16 bit 的 short 型,32 bit 的 long 型(要看 具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度⼤ 于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了⼤端存储模式和小端存储模式。
例如:⼀个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为⾼字节, 0x22 为低字节。对于⼤端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在⾼地址中,即 0x0011 中。⼩端模式,刚好相反。我们常⽤的 X86 结构是⼩端模式,⽽ KEIL C51 则为⼤端模式。很多的ARM,DSP都为⼩端模式。有些ARM处理器还可以由硬件来选择是 ⼤端模式还是⼩端模式。
1.3 习题:用程序结果判断大端小端
请简述⼤端字节序和⼩端字节序的概念,设计⼀个小程序来判断当前机器的字节序。--- 百度笔试题
分析:
- 假如我们有一个int型的十进制数1,如果是小端字节序,它的16进制排列是01 00 00 00;如果是大端字节序,它的16进制排列是00 00 00 01。
- 指针接收变量的地址是该变量最低地址。
- 指针的类型决定指针访问的步长。
知道了这几个知识,我们就可以写成这个程序:
int check_sys()
{int i = 1;return (*(char*)&i);
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}
在VS下输出是小端:
![]()
char*指针只能访问一个字节,如果是小端字节序,读到的是数据01,即十进制的1;如果是大端字节序,读到的数据是00,即十进制的0。
2. 各种易混淆的高低地址顺序
2.1 监视窗口的地址表示【计算机标准展示方式】
监视窗口的数据都是16进制的数字,常用“列4”的表示方式。
监视窗口的地址顺序:
(1)横轴:从左往右看,地址变低。(左低右高)
(2)纵轴:从上往下看,地址变高。(上低下高)
代码演示:(十进制的5 等于 十六进制的00 00 00 05)
int main()
{int a = 5;return 0;
}
列为4时的监视窗口展示顺序:(int是4个字节,所以“列4”是最常用的展示方式)

列为1时的监视窗口展示顺序:

图示:
2.2 横向地址表示
因为监视窗口的标准展示顺序既有横向的地址变化,又有竖向的地址变化,太过复杂。
为了方便自己的理解,我们常采用横向的地址顺序。
(横向地址顺序不是第一次出现了,在我们学习数组的时候就已经接触过,只是当时用的数据是十进制的数据,没有大小端字节序的概念)
比如刚刚的int a=5,用横向的地址表示是下面这样:
图示:
2.3 一个字节 与 多个字节 的地址顺序区别
一个字节中,无地址顺序【无高低地址之分的数字位数顺序】
- 在数学上没有高低地址的说法,只是在物理的内存结构中有高低地址之分。
- 而最小的内存单元的大小是一个字节,对于一个最小单元来说,本质是8个二进制数字,显示的是2个16进制数字。
- 而一个数字是不会分高低地址的,只有高位数与低位数之分(即数字位数顺序)。
- 而数字位数顺序是固定的,从左向右 位序依次降低。比如十进制:从左往右,千位->百位->十位->个位……
多个字节中,有地址顺序,而且在VS2022中采用的是小端字节序的地址排序。
- 低位字节在低地址。
- 低位的2个16进制数,放在低地址。
例如,我们有1个int型的数据:int a = 0x12345678(十六进制数)
它的内存图示是如下:

监视窗口也是这样:

2.4 内存空间的开辟顺序
对于前后创建的多个变量或数组:
在debug,x86环境下:
栈区内存的使⽤习惯是从⾼地址向低地址使⽤的。【按代码顺序,先在高地址创建变量(或数组),再向低地址创建变量(或数组)】
在release环境 或 x64环境下:
栈区内存的使⽤习惯是从低地址向高地址使⽤的。【按代码顺序,先在低地址创建变量(或数组),再向高地址创建变量(或数组)】
具体的例子可以看我这篇博客:https://blog.csdn.net/2301_80030290/article/details/141333314?spm=1001.2014.3001.5502#t16
对于创建的同一个数组:
- arr[0]是最低的地址(首地址),元素越靠后地址越高。
3. 判断练习
请判断下面的代码运行后的结果:(环境:VS2022 ,debug, X86)
int main() //大小端的
{int arr[4] = { 1, 2, 3, 4 };int* ptr1 = (int*)(&arr + 1);int* ptr2 = (int*)((int)arr + 1);printf("%x\n%x", ptr1[-1], *ptr2);return 0;
}
运行结果:

画图解析

指针ptr1和ptr2都是整型指针,每次可访问4个字节。
这里ptr1[-1]访问的4个字节是:04 00 00 00。按小端字节序读取后的结果是16进制的0x00000004,也就是4。
这里ptr2访问的4个字节是:00 00 00 02。按小端字节序读取后的结果是16进制的0x02000000,也就是2000000
本期分享完毕,感谢大家的支持~Thanks♪(・ω・)ノ

相关文章:
大小端字节序 和 内存高低地址顺序
目录 1. 大小端字节序 1.1 什么是大小端字节序? 1.2 为什么有大小端字节序? 1.3 习题:用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…...
Spring扩展点系列-MergedBeanDefinitionPostProcessor
文章目录 简介源码分析示例示例一:Spring中Autowire注解的依赖注入 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPos…...
Centos 7.9 使用 crontab 实现开机启动
[rootlocalhost ~]# crontab -e [rootlocalhost ~]# reboot # crontab -e reboot /path/to/my/program # reboot 表示重启开机的时候运行一次 reboot /test/hello.sh 参考: Linux crontab 命令 https://www.runoob.com/linux/linux-comm-crontab.html Run prog…...
基于微信的设备故障报修管理系统设计与实现+ssm论文源码调试讲解
2相关技术 2.1微信小程序 小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。尤其拥抱微信生态圈,让微信小程序更加的如虎添翼,发展迅猛。 2.2 MYSQL数据…...
yolo自动化项目实例解析(二)ui页面整理 1.78
我们在上一章整理main.py 的if __name__ __main__: 内容还留下面这一段, from PyQt5.QtWidgets import *from lanrenauto.moni.moni import *from PyQt5.QtGui import *app QApplication(sys.argv) # 初始化Qt应用ratio screen_width / 2560 # 分辨率比例# 设…...
PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边框特效项目
项目地址: GitHub - github201014/PyQt-NativeWindow: A class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypesA class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypes - github201014/PyQt-NativeWindow…...
面试时遇见的项目问题
汽车在线销售平台项目 项目的甲方是谁? 甲方是一家汽车销售公司,他们希望通过互联网技术提升销售效率和服务质量 为什么要做这个项目? 很多消费者越来越倾向于在线上完成购车之前的大部分决策。所以甲方找到我们希望通过建立一个在线的销…...
在线骑行网站设计与实现
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装在线骑行网站软件来发挥其高效地信息处理的作用,…...
大批量查询方案简记(Mybatis流式查询)
Mybatis的流式查询 摘要: 介绍使用mybatis流式查询解决大数据量查询问题. 1 业务背景 开发中遇到一个业务,说起来也很无奈:公司用的数据库MySQL,一张表里只保留了一个月的数据,但是数据量竟然高达2000W还要多,然后用户有个需求也很恶心,为了完成这个业务我需要定时任务每一个月…...
python - 子类为什么调用父类的方法
菜鸟教程 - 面向对象https://www.runoob.com/python3/python3-class.html为什么写这个呢 ,因为很多时候,事情很简单,但我往往记住了使用方式,忘记了使用原因,也因为自己看到super()时,也想问为什么要用supe…...
【JavaScript】数据结构之字典 哈希表
字典 键值对存储的,类似于js的对象,但在js对象中键[key]都是字符串类型或者会转换成字符串类型,因此后声明的键值会覆盖之前声明的值。字典以map表示,map的键不会转换类型。 let map new Map() map.set(a, 1) map.set(b, 2) ma…...
Adobe出现This unlicensed Photoshop app has been disabled
Adobe Acrobat或Photoshop软件突然出现This unlicensed Photoshop app has been disabled 症状 解决方法 删除软件安装目录下的AcroCEF和acrocef_1l两个子文件夹。主要是为了删除AcroCEF.exe。 如果存在复发,则删除xxxxxxx\AdobeGCClient\AdobeGCClient.exe。 不…...
elementui 单元格添加样式的两种方法
方法一 <el-table-column fixed prop"name" label"姓名" width"120"> <<template scope"scope"> <span :class"{red:scope.row.color1,yell:scope.row.color2,green:scope.row.col…...
如何有效管理技术债务:IT项目中的长期隐患
如何有效管理技术债务:IT项目中的长期隐患 在软件开发和IT项目管理中,技术债务(Technical Debt)是一个经常被忽视却又至关重要的概念。技术债务就像金融债务一样,当我们在项目开发中选择了某些“捷径”来快速交付&…...
2024 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|大数据驱动的地理综合问题|数学建模完整代码+建模过程全解全析
当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题! CS团队倾注了大量时间和心血,深入挖掘解…...
Linux 清空redis缓存及查询key值
1.登录redis redis-cli -h 127.0.0.1 -p 6379# 如果有密码需要下面这一步 auth 你的密码直接带密码登录 redis-cli -h 127.0.0.1 -p 6379 -a 密码出现ok表示登录成功 2.标题查看所有key keys *3.查看某个key 的值 get keyName4.清空整个Redis服务器的数据 flushall5.查看…...
MySql调优(三)Query SQL优化(2)explain优化
explain执行计划出现以下情况,均需要优化: 一、Using temporary 查询执行过程中出现Using temporary提示,通常意味着MySQL需要创建一个临时表来存储中间结果。这种情况多发生在数据库优化器无法通过现有的索引直接有效地执行查询时…...
Java【代码 18】处理Word文档里的Excel表格数据(源码分享)
处理Word文档里的Excel表格数据 1.原始数据2.处理程序2.1 识别替换表格表头2.2 处理多余的换行符2.3 处理后的结果 3.总结 1.原始数据 Word 文档里的 Excel 表格数据,以下仅为示例数据: 读取后的字符串数据为: "姓名\r\n身份证号\r\n手…...
21、Tomato
难度 低(个人认为中) 目标 root权限 一个flag 使用VMware启动 kali 192.168.152.56 靶机 192.168.152.66 信息收集 端口信息收集 可以看到有个ftp服务,2211实际是ssh协议端口,80、8888是一个web服务 web测试 80端口显示一个tomato 查看源码给了一些…...
代码随想录 八股文训练营40天总结
参加训练营的话也是给自己一定的约束力,让自己能够定期去对八股文进行一个背诵,虽然说中间有几天放假,没有进行打卡外,还是比较完整的坚持下来了。 从计算机网络--操作系统--MySQL--Redis--C基础,虽然这些知识都有看过…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...


