回忆大端序和小端序

一个地址存储8位数据,也就是1字节
对于栈空间数据,地址从上向下增长(从高向低增长)
对于堆空间数据,地址从下向上增长(从低地址向高地址)

对于大端序和小端序的概念不再赘述
大端序:高位数据存在低地址;
小端序:高位数据存在高地址;

union w
{
	int a;
	char b;
} c;
int checkCPU()
{	
	c.a = 1;
	return (c.b == 1);
}
// 返回 1 则为小端序,反之为大端序

解释:
存储:如果为大端序:高位地址存储0x01
如果为小端序:低位地址存储0x01

而c.b的访问是从低位地址开始读取一个字节的数据;
这是union的特性,共享内存空间;
如果我们访问a:则从低位地址开始读取数据,并按照CPU的大小端对数据进行解析;

举例:
假设将上面的赋值语句替换为:c.a = 0x01 00 00 02;
一:CPU为大端序:反着存
低位地址->高位地址: 0x01, 0x00, 0x00, 0x02
读取c.b:0x01
读取c.a: 0x01,0x00,0x00,0x02 -> 解析:因为是大端序,所以先读出来的低地址数据为高位数据,解析得到c.a = 0x00 00 00 01;

二:CPU为小端序:
低位地址-> 高位地址:0x02 0x00 0x00 0x01
读取c.b: 0x02
读取c.a:0x02 0x00 0x00 0x01 -> 解析:因为是小端序,所以先付出来的低地址数据为低位数据,解析得到c.a = 0x01 00 00 02;

over~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值