/* 将一个unsigned long 型的IP转换为字符串类型的IP */
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1]; //ip字符串格式包含4个三位数加三个点加一个结尾符
static short which;
u_char *p;
p = (u_char *)∈
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
sprintf(output[which], "%d.%d.%d.%d", p[0],p[1], p[2], p[3]);
return output[which];
}
解释:http://topic.csdn.net/t/20051007/20/4310836.html
如下:这是个特殊应用的转换函数
#define IPTOSBUFFERS 12 //定义缓冲区大小为12个,从下面的函数知道
//这个函数可以保留11个转换结果
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1];//输出3点4段的字符串,可以容纳12次计算结果,但第一个没有使用
static short which; // 计数
u_char *p;
p = (u_char *)∈ // 指向长整数IP地址的字符型指针
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1); // 每调用本函数一次,计数器加1
sprintf(output[which], "%d.%d.%d.%d ", p[0], p[1], p[2], p[3]);//转换为3点4段的字符串如192.168.0.1,并保存到一个
//output缓冲中
return output[which];//返回这个转换结果。
}
struct sockaddr_in *a;
......
iptos(a-> sin_addr.s_addr);
-------
这个函数可以保留11次转换结果,但结果在子函数内部,不知道编程者干什么用,如果不需要这些,可以很简单改编为:
char *iptos(u_long in)
{
static char output[3*4+3+1];//输出3点4段的字符串
u_char *p;
p = (u_char *)∈ // 指向长整数IP地址的字符型指针
sprintf(output, "%d.%d.%d.%d ", p[0], p[1], p[2], p[3]);
return output;//返回这个转换结果。
}