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

来源:互联网 发布:金数据和麦克 编辑:程序博客网 时间:2024/05/02 04:49

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

0 0
原创粉丝点击