C++中IPv4字符串与u_int32_t的转换

C++中IPv4字符串与u_int32_t的转换

inet_pton函数简介
IP地址转换函数,可以在将IP地址在“点分十进制”和“二进制整数”之间转换
需要引用的头文件:

#include 
#include 
#include 

函数形式:
int inet_pton(int af, const char *src, void *dst);

  • af确定转换类型,取值为AF_INET时,转换iPv4地址;取值为AF_INET6时,转换IPv6地址
  • src为想要转换的地址
  • dst为转换后地址的存储结构,根据af的取值决定为struct in_addr或struct in6_addr

struct in_addr简介:
in_addr是一个结构体,可以用来表示一个32位的IPv4地址

#include 
struct in_addr {
    in_addr_t s_addr;
};

in_addr_t 一般为 32位的unsigned int,其字节顺序为网络顺序(network byte ordered),即该无符号整数采用大端字节序
可使用ntohl函数将其转化为主机序

#include 
u_int32_t ntohl(u_int32_t netlong);

使用示例:

#include 
#include 
#include 


string ipstr = "192.168.1.1";//点分十进制IP字符串
struct in_addr s;
u_int32_t ip;
inet_pton(AF_INET,str.c_str(),(void *)&s);
ip = s.s_addr;//网络序IP二进制串
ip = ntohl(ip);//转换成主机序

inet_ntop函数简介
头文件与inet_pton函数相同
函数形式:
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
多了一个参数socklen_t cnt, 它是所指向缓存区dst的大小,避免溢出,如果缓存区太小无法存储地址的值,则返回一个空指针,并将errno置为ENOSPC。
使用示例:

#include 
#include 
#include 

char ipstr[16];
struct in_addr s;
u_int32_t ip = 1246899950;
s.s_addr = htonl(ip);
inet_ntop(AF_INET, (void *)&s, ipstr, (socklen_t)sizeof(ipstr));

你可能感兴趣的:(C++中IPv4字符串与u_int32_t的转换)