大小端模式:字节顺序的奥秘

对于16位、32位等位数更高的处理器,由于寄存器宽度大于1字节,必然存在如何安排多字节的问题,因此导致了大端存储模式(big-endian)和小端存储模式(little-endian)的产生。

大小端模式在处理器访问内存时用于描述寄存器的字节顺序和内存中的字节顺序之间的关系。

如一个16位的short类型变量X在内存中的地址为 0x0010,X的值为0x1122,其中,0x11为高字节,0x22为低字节。

  • 对于大端模式,就将0x11(高位)放在低地址中,将0x22(低位)放在高地址中。
  • 对于小端模式,就将0x11(高位)放在高地址中,将0x22(低位)放在低地址中。

很多的 ARM 处理器默认使用小端模式,有些 ARM 处理器还可以由硬件来选择是大端模式还是小端模式。Cortex-A 系列的处理器可以通过软件来配置大小端模式。

如何判断处理器是大端模式还是小端模式?

使用联合体(union),其存放顺序是所有成员均从低地址开始存放,利用该特性可以轻松判断 CPU 对内存采用大端模式还是小端模式读写。

c 复制代码
#include <stdio.h>
bool checkCPU(void)
{
	union w
	{
		int a;
		char b;
	}c;
	c.a = 1;
	return (c.b==1);
}
int main()
{
	printf("%d\n", checkCPU());
	return 0;
}

以上代码如果输出1则说明为小端模式(低字节存到高地址),否则为大端模式(低字节存到了低地址)。

相关推荐
安科瑞-小李6 分钟前
铁路智能运维进化路线:自动化→状态可视→预测维护
运维·自动化·数据采集·能耗可视化
雯宝41 分钟前
3. 驱动框架(块设备)
linux
酷可达拉斯42 分钟前
自动化运维-Ansible任务控制与流程控制
运维·自动化·ansible
HiDev_42 分钟前
【非标自动化】2、认识元器件(电机保护器)
运维·自动化
立少→万能汉编1 小时前
用“立少→超文本”写静态网页,标签<倍>
服务器·前端·javascript
静止了 所有的花开1 小时前
Ubuntu 26.04 静态 IP 配置不生效解决方法
linux·ubuntu·静态ip
承渊政道2 小时前
KES专业技能包发布:覆盖数据库开发、迁移与运维全流程
运维·数据库·gitee·数据库开发·金仓数据库
笨鸟先飞,勤能补拙2 小时前
Web 服务器与计算机网络全景原理
运维·服务器·前端·网络·人工智能·计算机网络·web安全
caimouse2 小时前
ReactOS 图形系统分析(3):显示驱动 DDI framebuf.dll
linux·运维·网络
跨境小彭2 小时前
Temu运营优化方案:活动库存自动化管控,解决断流、超卖与权重下跌问题
大数据·运维·人工智能·自动化·跨境电商·temu·temu电商运营