/* 將一個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;//返回這個轉換結果。
}