例如输入字符串“10.10.10.1",输出168430081。非法ip地址比如“1234.1.test”返回 0。
1.相关API
(1)inet_aton()
头文件:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
函数定义:
int inet_aton(const char *cp, struct in_addr *inp);
函数说明:
将cp所指的ipv4地址字符串转换成网络使用的二进制数字,然后存放于inp所指的in_addr结构中。
结构in_addr定义如下:
struct in_addr
{
unsigned long int s_add;
};
返回值:
成功返回非0值,失败则返回0。
(2)ntohl()
头文件:
#include<netinet/in.h>
函数定义:
unsigned long int ntohl(unsigned long int netlong);
函数说明:
ntohl()用来将参数指定的32位netlong转换成主机字符顺序。
返回值:
返回对应的主机字符顺序
2.相关程序
(1)示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
int main(int argc, char **argv)
{
char ip_address[20];
int result;
struct in_addr addr;
uint32_t ip_integer = 0;
printf("请输入点分IP地址:");
scanf("%s", ip_address);
result = inet_aton(ip_address, &addr);
if (0 == result)
{
printf("输入的IP地址不合法\n");
return 0;
}
ip_integer = ntohl(addr.s_addr);
printf("转换后的整数为:%u \n", ip_integer);
return 0;
}