判断主机字节序

       在socket网络编程中,要遇到处理字节序的问题,在网络中数据一般是以大端字节序来传送的,而我们使用的主机则有的是大端格式来存数数据,有的则是小端格式。Intel系列的处理器一般使用的是小端字节序,但是有的主机是使用大端字节序。因此在不知道自己主机的字节序时,可以通过编程测试主机的字节序。

#include <stdio.h>

int main(int argc, char *argv[])
{
    union
    {
        short s;
        char c[sizeof(short)];
    }un;
    
    un.s = 0x0102;
    
    if( sizeof(short) == 2 )
    {
        if( un.c[0] == 1 && un.c[1] == 2 )
        {
            printf("big-endian\n");
        }
        else if( un.c[0] == 2 && un.c[1] == 1 )
        {
            printf("little-endian\n");
        }
        else
        {
            printf("sizeof(short) = %d\n", sizeof(short));
        }
    }
  
  printf("Press enter to continue ...");
  getchar();	
  return 0;

}


这里顺便把TCP/IP应用程序中提供的四个通用函数以处理主机字节序和网络字节序之间的转换列出

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostint32);//返回值:以网络字节序表示的32位整型数
uint16_t htons(uint16_t hostint16);//返回值:以网络字节序表示的16位整型数 
uint32_t ntohl(uint32_t netint32); //返回值:以主机字节序表示的32为整型数
uint16_t ntohs(uint16_t netint16); //返回值:以主机字节序表示的16位整型数 


 

你可能感兴趣的:(判断主机字节序)