类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
如题
网友回答:
CString strTemp;
strTemp.Format(...);
用inet_ntoa函数,例子如下
#include "winsock.h"
#include "stdio.h"
int main(int argc,char* argv[])
{
in_addr a;
a.S_un.S_addr = inet_addr("192.168.0.74");
char*p = inet_ntoa(a);
printf("ip addr is %s\n",p);
return 0;
}
char addr[20];
addr=inet_ntoa(a.S_un.S_addr);
假设使用struct sockaddr_in ina,想将IP地址“164.112.175.124”储存到其中,那么所要做的是调用函数inet_addr(),转换上面“数字 + 句点”格式的IP地址到unsigned long中。这个工作可以这样来做:
ina.sin_addr.s_addr=inet_addr(”164.112.175.124”);
inet_addr()返回的地址已经是按照网络字节顺序的,不用调用htonl()。在发生错误的时候inet_addr()返回-1。调用后,需使用正确的错误检查,比如说当IP地址为255.255.255.255的时候,返回的就是(unsigned)-1。因为这是个广播地址,你的程序必需能够将这类错误捕获出来。
你现在就可以转换字符串形式的IP地址为1ong了。若有一个数据结构struct in_addr,按照“数字+句点”格式打印时,你要用函数inet_ntoa()(ntoa意思是network to ascⅡ),如下所示:
printf(“%s”,inet_ntoa(ina.sin_addr));
这样就可以打印IP地址。注意:函数inet—ntoa()的参数是struct in_addr,而不是long,它返回的是一个指向字符的指针。
在inet_ntoa内储存了字符数组,因此它每次调用inet_ntoa()的时候将覆盖以前的内容。
例如:
Char a1,*a2;
......
a1=inet_ntoa(ina1.sin_addr); /*假设地址是;164.112.175.124*/
a2=inet_ntoa(ina2.sin_addr);/*假设地址是:202.112.58.200*/
printf(“address 1:%sn”,a1);
printf(“address 2:%sn”,a2);
上面运行结果是:
address l:202.112.58.200
address 2:202.112.58.200
如果想保存地址,那么可用strcpy()保存到自己的字符数组中。