数据存储的大小端模式


前言

一个数据在内存中有两种存储方式:高地址存储高字节数据,低地址存储低字节数据;或者高地址存储低字节数据,而低地址存储高字节数据


一、什么是大/小端模式

不同字节的数据在内存中存储顺序称之为字节序。根据字节序的不同,可以将存储模式分为大端模式小端模式,以4字节16进制数0x12345678举例说明。

         高地址        低地址
大端模式     |12|34|56|78|         低字节放在低地址;高字节放在高地址
小端模式     |78|56|34|12|         低字节放在高地址;高字节放在低地址

二、代码测试

1. 利用 “截断”原理测试

例如:定义一个2字节的 short 型变量 a ,再定义一个 1字节的char 型变量 b ;当

b = a;      //此时会发生“截断”

理解”截断“前首先说一下内存地址的概念,内存地址就是编号,每一个字节一个编号,a 占用两个字节,并将第一个字节的编号作为其变量地址,发生截断时,会从第一个字节编号里面取出来一个字节的数据赋值给 b。

代码如下:

int main()
{
	short a = 0x1234;
	char b ;
	
	
	b = a;
	printf("%x", b);
}

结果如下

34
--------------------------------
Process exited after 0.828 seconds with return value 2
请按任意键继续. . .

由此可得,低字节地址存储的为0x34 ,又因为0x34 为变量的低字节,所以为小端模式。

2.利用共用体

代码如下:

union point{
    short i;
    char arr[2];
};

int main(int argc, char *argv[]) 
{
    union point test;
    test.i = 0x1234;
    printf("%x %x ", test.arr[0],test.arr[1]);
	return 0;
}

运行结果:

34 12
--------------------------------
Process exited after 0.7799 seconds with return value 0
请按任意键继续. . .

由此可得 test.i 低字节地址存储的为0x34,高字节地址存储的为0x12,故为小端模式。


总结

以上,介绍了两种测试机器大小端的方式,经验证本机为小端模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值