网络地址转换相关函数

来源:互联网 发布:java api 1.7 苹果版 编辑:程序博客网 时间:2024/05/19 19:12

经常需要涉及到网络地址相关的转换,从网络字节序到主机字节序,点数格式到长整型,经常要进行转换,总结了相关的一些转换函数,以备需要时可以快速的找到.

1、inet_addr() 
   功能: IP地址从 点数格式转换成无符号长整型
   unsigned long PASCAL FAR inet_addr( const struct FAR* cp);
   cp:一个以Internet标准“.”间隔的字符串
     返回值: 若无错误发生,inet_addr()返回一个无符号长整型数,返回的地址已经是网络字节格式,所以你无需再调用 函数htonl()。
      
2、inet_ntoa 
   功能:将无符号长整型IP地址转换成点数格式
   char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
      in:一个表示Internet主机地址的结构。
     返回值:若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NULL 
 
3、htonl()
     功能: 将主机的无符号长整形数转换成网络字节顺序。   
u_long PASCAL FAR htonl( u_long hostlong);  
hostlong:主机字节顺序表达的32位数。   字节顺序。  
返回值:   htonl()返回一个网络字节顺序的值。


  4、htons()  
功能: 将主机的无符号短整形数转换成网络字节顺序。  
u_short PASCAL FAR htons( u_short hostshort);   
hostshort:主机字节顺序表达的16位数。   
返回值:htons()返回一个网络字节顺序的值


5、ntohl()  
功能: 将一个无符号长整形数从网络字节顺序转换为主机字节顺序。   
u_long PASCAL FAR ntohl( u_long netlong);   
netlong:一个以网络[字节顺序表达的32位数。     
返回值: ntohl()返回一个以主机字节顺序表达的数。


6、ntohs()  
功能:将一个无符号短整形数从网络字节顺序转换为主机字节顺序。   
u_short PASCAL FAR ntohs( u_short netshort);   
netshort:一个以网络字节顺序表达的16位数。   
返回值: ntohs()返回一个以主机字节顺序表达的数。 


7、备注
 inet_ntoa()它返回的是一个指向一个字符的 指针。它是一个由inet_ntoa()控制的静态的固定的指针,所以每次调用 inet_ntoa(),它就将覆盖上次调用时所得的IP地址。例如:
char *a1, *a2;
a1 = inet_ntoa(ina1.sin_addr); /* 这是198.92.129.1 */
a2 = inet_ntoa(ina2.sin_addr); /* 这是132.241.5.10 */
printf("address 1: %s ",a1);
printf("address 2: %s ",a2);
输出如下:
address 1: 132.241.5.10
address 2: 132.241.5.10
假如你需要保存这个IP地址,使用strcopy()函数来指向你自己的字符指针。