大小端

大小端由来:

端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。

 

32位和16位的大小端:

如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端模式在内存中的存储由下表所示。

地址偏移

大端模式

小端模式

0x00

12(BIT3)

78(BIT0

0x01

34(BIT2

56(BIT1

0x02

56(BIT1

34(BIT2

0x03

78(BIT0

12(BIT3

如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移

大端模式

小端模式

0x00

12(BIT1)

34(BIT0

0x01

34(BIT0)

12(BIT1

 

 

大小端检测:

第一种:From BT Statck

u8 CheckLittleEndian(void)
{
	u16 i = 1;
	if (1 == (*(u8 *)&i))
	{
	   return (TRUE);
	}
	return (FALSE);  /* return value TRUE:little, False:big */
}


第二种:

u8 CheckLittleEndian(void)
{
	union 
	{
	    u8 a;
	    u16 b;
	}c;
	c.b = 1;

	return (1 == c.a);  /* return value TRUE:little, False:big */
}

 

大小端转换:
void ChangeEndianU16(u8* p1, u8* p2)
{
    *(p1+0) = *(p2+1);
    *(p1+1) = *(p2+0);

    return;
}


 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值