大小端相关

1、大小端定义
1.1、大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。地址由小向大增加,而数据从高位往低位放。

大端模式eg:
unsigned int value = 0x12345678;
unsigned char buf[4] = {0};
高地址
--------------
 buf[3] (0x78) -- 数据低位
 buf[2] (0x56)
 buf[1] (0x34)
 buf[0] (0x12) -- 数据高位
--------------
低地址

1.2、小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

小端模式eg:
unsigned int value = 0x12345678;
unsigned char buf[4] = {0};
高地址
--------------
 buf[3] (0x12) -- 数据高位
 buf[2] (0x34)
 buf[1] (0x56)
 buf[0] (0x78) -- 数据低位
--------------
低地址

2、为什么有大小端
这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节(8bit)。对于位数大于 8位的处理器,例如32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就出现了大端存储模式和小端存储模式。

3、测试大小端代码

void func(void)
{
	int x = 1;
	if (1 == *(char*)&x)
	{
		printf("little - endian\n");
	}
	else
	{
		printf("big - endian\n");
	}
}

4、大小端转化代码

#define UINT unsigned int 
#define BSWAP_32(x) \     
	(UINT)((((UINT)(x) & 0xff000000) >> 24) | \             
	(((UINT)(x) & 0x00ff0000) >> 8) | \            
	(((UINT)(x) & 0x0000ff00) << 8) | \             
	(((UINT)(x) & 0x000000ff) << 24) \        
	)

#define USHORT unsigned short
#define BSWAP_16(x) \
        (USHORT)((((USHORT)(x) & 0xff00) >> 8) | \
        (((USHORT)(x) & 0x00ff) << 8)\
        )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值