您的位置:首页 > 其它

判断机器大小端的方法总结

2015-05-18 11:32 211 查看
typedef unsigned char BOOL;

#define BOOL_TRUE 1

#define BOOL_FALSE 0

判断机器大小端面,小端返回BOOL_TRUE,大端返回BOOL_FALSE;

首先,先说明下大小端的定义:

小端:内存的低地址存储的是数据的低位,高地址存储的是数据的高位。

大端:内存的高地址存储的是数据的

例:大小端对一个int类型数据的存储,以0x12345678为例

内存地址0x01030x01020x01010x0100
小端12345678
大端78563412
1.利用联合体特性判断(联合体union的存放顺序是所有成员都从低地址开始存放

BOOL IsLittleEndian()
{
ENDIAN_U stEndian;
stEndian.sShort = 0x0001;
if(stEndian.cChar == 0x01)
{
return BOOL_TRUE;
}
return BOOL_FALSE;
}


2.利用指针判断

BOOL IsLittleEndian()
{
short sShort = 0x1234;
char *pcChar = (char *)&sShort;
if(*pcChar == 0x34)
{
return BOOL_TRUE;
}
return BOOL_FALSE;
}


3.利用系统函数htons()判断

BOOL IsLittleEndian()
{
if(0x01 != htons(0x01))
{
return BOOL_TRUE;
}
return BOOL_FALSE;
}


常见的情况为以上三种,个人感觉还可以有一种

4.利用位域判断

<pre name="code" class="cpp">typedef struct Endian_Bit_tag
{
char sReserve:4;
char sReserve2:4;
}ENDIAN_BIT_S;

BOOL IsLittleEndian_Bit()
{
ENDIAN_BIT_S stEndian;
*(char *)(&stEndian) = 0x01;
if(stEndian.sReserve== 0x1)
{
return BOOL_TRUE;
}
return BOOL_FALSE;
}




以此题为例:当机器为小端时,stEndian.sUseful的值是0x01,当机器为大端时,stEndian.sUseful的值是0x00
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: