附加說明下面爲您的享受:
// This is the number of IP string buffers.
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
// 12 buffers, each big enough to hold maximum-sized IP address
// and nul terminator.
static char output[IPTOSBUFFERS][3*4+3+1];
// Last buffer used.
static short which;
// Get uns. char pointer to IP address.
u_char *p;
p = (u_char *)∈
// Move to next string buffer, wrapping if necessary.
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
// Output IP address by accessing individual unsigned chars in it.
_snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),
"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
// Return the current buffer.
return output[which];
}
它的工作原理是因爲IPv4地址的表示是在存儲器中的32位的值,並且每個所述四個區段的佔據每一個八位字節。因此,將32位整數的地址轉換爲四字符數組然後使用該數組提取單個段是相對簡單的事情。當然,這是根據具有特定位寬度的數據類型來預測的,因此它不是便攜式的。
奇怪的是12-IP地址循環隊列。也許這樣可以一次獲得多達12個IP地址,而不會覆蓋字符串,儘管我認爲我從未遇到過超過兩個(可能是三個代理服務器或pass-thru服務器)的情況需要在同一時間。我不認爲這是線程安全的,因爲在線程環境中對which
的修改本質上是危險的。
你不瞭解什麼?它看起來像是一個無符號的long,並且不幸的是它返回一個帶有懸掛指針的ip字符串表示。 – WhirlWind 2010-05-05 15:51:57
'172.16.48.1'的u_long是什麼? – user198729 2010-05-05 15:53:53
172 * 256^3 + 16 * 256^2 + 48 * 256^1 + 1 – WhirlWind 2010-05-05 15:56:11