”將一個unsigned long 型的IP轉換為字串型別的IP “ 解釋
/* 將一個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];
}
如下:這是個特殊應用的轉換函式
#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;//返回這個轉換結果。
}