from://http://hi.baidu.com/hst_jiangbo/item/2a66d8eadeacb3215b2d643a
从网络上接收的ip地址,有时候为了节省空间,用一个32位无符号整形数据表示ipv4地址。我们接收到之后,又需要转换成呢个数字和点格式的字符串来进行后续的操作。
比较勤奋点的人会自己写个函数做转换。
我属于比较懒的。不愿意做别人已经做过的事情。实际上,在linux里面,这些转换都有系统函数完成的。
SYNOPSIS
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *inp);
in_addr_t inet_addr(const char *cp);
in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
struct in_addr inet_makeaddr(int net, int host);
in_addr_t inet_lnaof(struct in_addr in);
in_addr_t inet_netof(struct in_addr in);
其中 inet_ntoa就可以完成我要的功能。简单实现过程如下:
struct in_addr stInAddr;//必要的结构体,只要包含前面三个头文件,就不要犯愁这个结构的定义
unsigned int iTemp; //保存整型的数据
unsigned char ipaddr[20]; //保存转换后的地址
stInAddr.s_addr=iTemp;
pIp=inet_ntoa(stInAddr);
strcpy(ipaddr,pIp);
就可以把iTemp转换成字符串保存到ipaddr中。后面的工作就可以继续下去了