大端(Big-Endian)小端(Little-Endian)不同的CPU将数据存储在内存中顺序不同造成的,大端:数据高位存储在内存地址的低位, 数据的低位存储在内存地址的高位.
我们假设内存从0x4000开始存放一个16位的数0x1234以下是大端和小端,
大端情况:
0x4000 | 0x4001 |
12 | 34 |
小端情况:
0x4000 | 0x4001 |
34 | 12 |
可以通过下面函数判断大端和小端:
bool Big_Endian()
{
union Endian
{
long l ;
char c[ sizeof(long )];
}e ;
e.l = 1;
return (e.c[ sizeof(long) - 1] == 1);
}
bool Little_Endian()
{
union Endian
{
long l ;
char c;
}e;
e.l = 1;
return (e.c == 1);
}
{
union Endian
{
long l ;
char c[ sizeof(long )];
}e ;
e.l = 1;
return (e.c[ sizeof(long) - 1] == 1);
}
bool Little_Endian()
{
union Endian
{
long l ;
char c;
}e;
e.l = 1;
return (e.c == 1);
}
由于存在大端和小端区别,因此在进行socket通信时,一定要注意转换成网络字节序.