仅仅适用于ipv4的函数:
1 : inet_addr 函数将数字和点组成的字符串转换为一个无符号长整形
ina.sin_addr.s_addr = inet_addr("10.2.3.44")
注意:inet_addr 返回的已经是网络字节序的了,没有必要再次调用 htonl 函数
2 : inet_ntoa 函数接受一个sin_addr 将 sin_addr.s_addr 转换为 num.num.num.num 这样的字符串。
注意:inet_ntoa 函数接收的是一个 sin_addr 的类型的参数,并不是一个长整形。
inet_ntoa 返回一个字符串指针,它指向一个定义在函数 inet_ntoa 内static 类型字符串,所以对这个函数每次调用,都会改变上一次的调用结果
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <netinet/in.h>
5 #include <arpa/inet.h>
6 int main(){
7 char s[10];
8 memset(s, '\0', sizeof(s));
9 memcpy(s, "2.3.4.5", 7);
10
11
12 int ans = inet_addr(s);
13 printf("%s --> %d\n", s, ans);
14 struct in_addr in;
15 in.s_addr = ans;
16 printf("%d --> %s\n", ans, inet_ntoa(in));
17
18 return 0;
19 }
20
输出:
2.3.4.5 --> 84148994
84148994 --> 2.3.4.5