看WinPcap文档时有一段代码不懂
今天看WinPcap文档时有一段不懂,求教大家。下面Obtaining advanced information about installed devices例子中的一个函数,参数为((struct sockaddr_in *)a-> addr)-> sin_addr.s_addr,a为pcap_addr_t *。
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1];//?
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];
}
希望高手能把这段代码详细的解释一下。特别是标了//?这几行。感谢大家。
[解决办法]
这个函数是把 DWORD的IP地址,转成 字符串
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1];//? IPTOSBUFFERS:可以放几个IP地址.
//3*4+3 + 1 : 假设IP地址是 255.255.255.255 就需要 3*4个数字+3个点+一个空字符结束
static short which;
u_char *p;
p = (u_char *)∈
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);//? 如果转换IP的个数大于总Buffer数,就从0开始.
sprintf(output[which], "%d.%d.%d.%d ", p[0], p[1], p[2], p[3]);//? 这个不用解释了.
return output[which];
}