ip地址转换数字函数 iton_IP地址转换函数

只适用于IPV4

inet_addr函数将用点分十进制字符串表示的IPv4地址转化为用网络字节序整数表示的IPv4地址。 失败时返回INADDR_NONE。

inet_aton函数完成和inet_addr同样的功能,但是将转化结果存储于参数inp指向的地址结构中。

成功返回1,失败返回0。

inet_ntoa函数将用网络字节序整数表示的IPv4地址转化为用点分十进制字符串表示的IPv4地址。

该函数内部用一个静态变量存储转化的结果,函数返回值指向该静态内存,因此inet_ntoa是不可重入的。

#include in_addr_t inet_addr(const char*strptr);int inet_aton(const char* cp, struct in_addr*inp);char* inet_ntoa(struct in_addr in);

同时适用于IPV4和IPV6

#include

int inet_pton(int af, const char* src, void*dst);const char* inet_ntop(int af, const void* src, char* dst, socklen_t len);

inet_pton函数将用字符串表示的IP地址src(点分十进制IPv4或十六进制IPv6字符串)转换成网络字节序整数表示的IP地址,并把转换结果存储于dst指向的内存中。参数af:指定地址族,AF_INET或者AF_INET6。

返回值:

成功返回1,失败返回0并设置errno。

inet_ntop函数进行相反的转换,前三个参数的含义与inet_pton的参数相同,strptr不能为空,必须为目标存储单元分配大小最后一个参数len指定目标存储单元的大小。 inet_ntop成功时返回目标存储单元的地址,失败返回NULL并设置errno为ENOSPC

len的大小

#include

#define INET_ADDRSTRLEN 16

#define INET6_ADDRSTRLEN 46

inet_pton和htonl区别

uint32_t htonl(unin32_t host32bitvalue);

参数是32bit的二进制数值,在转换地址时就是32位的主机字节序ip地址(经常用点分十进制)

用法:servaddr.sin_addr.s_addr=htonl(127.0.0.1);

servaddr.sin_addr.s_addr=htonl(INADDR_ANY); // INADDR_ANY真实值为0.0.0.0

int inet_pton(int family,const char *strptr,void *addrptr);

该函数完成两个功能:1.字符串->二进制数值  2.主机字节序->网络字节序(所以调用此函数后不需htonl了)

第二个参数是ip地址字符串的指针

用法:inet_pton(AF_INET,argv[1],&servaddr.sin_addr);

第三个参数使用&servaddr.sin_addr.s_addr也可以通过

总结:数值型的ip地址转换用htonl,字符串类型的用inet_pton

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值