在使用socket编程时,我们经常要使用到IP地址转换函数。
比如
char *inet_ntoa(struct in_addr in);
该函数将用网络字节序整数表示的IPv4地址转化为用点分十进制字符串表示的IPv4地址。
man inet_ntoa可以看到inet_ntoa是不可重入的
The string is returned in a statically allocated buffer, which subsequent calls will overwrite.
编写程序如下
int main()
{
struct in_addr addr1, addr2;
addr1.s_addr = inet_addr("1.2.3.4");
addr2.s_addr = inet_addr("10.194.71.60");
cout << "A地址的网络字节序整数表示: " << addr1.s_addr << endl;
cout << "B地址的网络字节序整数表示: " << addr2.s_addr << endl;
char *p1 = inet_ntoa(addr1);
cout << "A地址的点分十进制字符串表示: " << p1 << endl;
char *p2 = inet_ntoa(addr2);
cout << "B地址的点分十进制字符串表示: " << p2 << endl;
cout << "A地址的点分十进制字符串表示: " << p2 << endl;
cout << "B地址的点分十进制字符串表示: " << p2 << endl;
return 0;
}
得到的运行结果为
A地址的网络字节序整数表示: 67305985
B地址的网络字节序整数表示: 1011335690
A地址的点分十进制字符串表示: 1.2.3.4
B地址的点分十进制字符串表示: 10.194.71.60
A地址的点分十进制字符串表示: 10.194.71.60
B地址的点分十进制字符串表示: 10.194.71.60