说明:我们知道网络字节序是大端字节序,但是各个操作系统的字节序就不固定了,可能是小端字节序,也有可能是大端字节序。
所以,我们在将网络字节流赋值给本地变量时,需要先判断下本地是否是大端字节序,如果不是,需要先将网络字节流转换为小端字节序,然后再赋值,否则,会出现解析错误。
封装
typedef enum BYTE_ORDER
{
BYTE_LITTLE_ENDIAN = 0,
BYTE_BIG_ENDIAN,
BYTE_OTHER
}BYTE_ORDER;
BYTE_ORDER GetByteOrder()
{
int temp_i = 0;
char* temp_p = NULL;
temp_p = (char*)&temp_i;
temp_p[0] = 0;
temp_p[1] = 0;
temp_p[2] = 0;
temp_p[3] = 1;
if (temp_i == 1)
{
return BYTE_BIG_ENDIAN;
}
return BYTE_LITTLE_ENDIAN;
}
使用
int main()
{
char byte_order=GetByteOrder();
if(byte_order == BYTE_LITTLE_ENDIAN)
{
printf("The local host is little endian.\n");
}
else if(byte_order == BYTE_BIG_ENDIAN)
{
printf("The local host is big endian.\n");
}
else
{
printf("The local host is unknown byte order.\n");
}
}