参考这个句子
IP地址的本地字节顺序转换函数包括:
1、uint32_t htonl(uint32_t hostlong); //一般不用来转换ip地址
此函数从int转移到int类型,但我们熟悉的ip是点的十进制字符串。
不好用。 (因为您必须先将点转换为十进制,然后再转换为uint32_t,然后再调用htonl )函数。 )
因此,大多数函数用于对32位(4字节整数)进行字节序转换。
ps:
如果不指定ip地址,则可以直接在此宏中定义INADDR_ANY,这是最简单的。
addr.sin _ addr.s _ addr=htonl (in addr _ any ); //自动获取当前网卡的有效ip地址
2、intinet_pton(int af,const char*src,void*dst); //经常用这个函数点分十进制字符串ip转换为网络字节序。
//例char *ip='192.168.1.1 '; char *port='8000 '; struct sockaddr_in addr; addr.sinfamily=AF_INET; //afin et6addr.sin _ port=htons (atoi (port ) ); inet_Pton(af_inet,ip,addr.sin_addr ); 同样,如果需要将网络字节序转换为主机字节序
使用const char*inet_ntop(int af,const void *src,char *dst,socklen_t size);-------直接转换为点的十进制字符串。
dst是变换后点分十进制字符串; size是dst的大小
//示例charstr[sizeof(in_addr ) ]; ptr=inet_ntop(af_inet,foo.sin_addr,str,sizeof(str ) ); 从附录5可以看出,inet_ntop的第二个参数是指向struct in_addr的结构指针。
3、inet_addr ()函数//已弃用,不建议使用
//例char *ip='192.168.1.1 '; char *port='8000 '; struct sockaddr_in addr; addr.sinfamily=AF_INET; //afin et6addr.sin _ port=htons (atoi (port ) ); addr.sin _ addr.s _ addr=inet _ addr (IP ); 4、http://www.Sina.com/:将IP地址转换为网络字节序有以下三种方法。
写程序的时候,通常选择前两种形式。
1 ) addr.sin _ addr.s _ addr=htonl (in addr _ any );
2 ) inet_Pton(af_inet,ip,addr.sin_addr );
注: inet_pton的第三个参数具有in_addr结构指针,而不是addr.sin_addr.s_addr。 5因为从附录中可以看到,dst必须是sizeof(structin_addr ) bytes long
5、附录:
总结
sa_family_t sin_family; //地址族合同
in_port_t sin_port; //端口号
struct in_addr sin_addr; //ip地址
struct sockaddr_in{
};
uint32_t s_addr;
struct in_addr{