先解释一下大端小端的概念:
1 将低字节放在低地址,这称为小端字节序(little-endian)
2 将高字节放在低地址,这种称为大端字节序(big-endian)
使用宏的方法:
const
int
endian = 1;
#define is_bigendian() ( (*(char*) &endian) == 0 )
#define is_littlendbian() ( (*(char*) &endian) == 1 )
endian在内存中的十六进制表示为:0x00,0x00,0x00,0x01;
&endian是取endian的地址,
*(char *)&endian是取endian首地址的值,当取到0x00时,说明endian的高位字节放在内存的低地址,那当然是大端了
方法二:
bool
IsLittleEndian()
{
union
{
long
val;
char
Char[
sizeof
(
long
)];
}u;
// 1-小端(Intel); 0-大端(Motor)
u.val = 1;
if
( u.Char[0] == 1 )
{
// 小端
return
true
;
}
else
if
( u.Char[
sizeof
(
long
)-1] == 1 )
{
// 大端
return
false
;
}
}
union联合体元素在内存中的存放是共用内存,
long 的字节表示:0x00, 0x00, 0x00, 0x01;
char 的字节表示:Char[3], Char[2],Char[1],Char[0];
u.Char[0] == 1 说明低位地址存放低字节内容,为小端
u.Char[3] == 1 说明高位地址存放低字节内容,为大端