inet_addr函式 (winsock2.h)
inet_addr函式會將包含IPv4點點十進位位址的字串轉換成IN_ADDR結構的適當位址。
語法
unsigned long WSAAPI inet_addr(
const char *cp
);
參數
cp
TBD
傳回值
如果沒有發生錯誤, inet_addr 函式會傳回不帶正負號的長值,其中包含指定的因特網位址的適當二進位表示法。
如果 cp 參數中的字串不包含合法的因特網位址,例如,如果 “a.b.c.d” 位址的一部分超過 255, 則inet_addr 傳回值 INADDR_NONE。
在 Windows Server 2003 和更新版本中,如果 cp 參數中的字串是空字串, 則inet_addr 傳回 值INADDR_NONE。 如果在 cp 參數中傳遞 NULL,則inet_addr傳回值INADDR_NONE。
在 Windows XP 上,如果 cp 參數中的字串是空字串, 則inet_addr 傳回 值INADDR_ANY。 如果在 cp 參數中傳遞 NULL,則inet_addr傳回值INADDR_NONE。
備註
inet_addr函式會解譯 cp 參數所指定的字元字串。 此字串代表以因特網標準 “.'' 表示的數值因特網位址。 符號。 傳回的值是適合用來作為因特網位址的數位。 所有因特網位址都會以IP的網路順序傳回, (位元組從左到右排序) 。 如果您傳入 “ (空格) 至 inet_addr 函式, inet_addr 會傳回零。
在 Windows Vista 和更新版本上, RtlIpv4StringToAddress 函式可用來將 IPv4 位址的字串表示轉換為以 IN_ADDR 結構表示的二進位 IPv4 位址。 在 Windows Vista 和更新版本上, RtlIpv6StringToAddress 函式可用來將 IPv6 位址的字串表示轉換為以 IN6_ADDR 結構表示的二進位 IPv6 位址。
因特網位址
使用 “.'' 指定的值 表示法採用下列其中一種形式:a.b.c.d a.b.c.b a
當指定四個部分時,每個元件都會解譯為數據位元組,並從左至右指派至因特網位址的 4 個字節。 當因特網位址在 Intel 架構上視為 32 位整數數量時,上述的位元組會顯示為 「d.c.b.a』『』。 也就是說,Intel 處理器上的位元組會從右至左排序。
組成 “.” 表示法中位址的部分可以是十進位、八進位或十六進位,如 C 語言所指定。 以 「0x」 或 「0X」 開頭的數位表示十六進位。 以 「0」 開頭的數位表示八進位。 所有其他數字都會解譯為十進位。
因特網位址值 | 意義 |
---|---|
"4.3.2.16" | Decimal |
"004.003.002.020" | 八進位 |
“0x4.0x3.0x2.0x10” | 十六進位 |
“4.003.002.0x10” | 混合 |
inet_addr 函式支援在 cp 參數中傳遞之字串的十進位、八進位、十六進位和混合表示法。
指定兩部分位址時,最後一個部分會解譯為24位數量,並放在最右邊的網路位址3個字節中。 這可讓兩部分位址格式方便將類別 A 網路位址指定為 「net.host』。
只指定一個部分時,值會直接儲存在網路位址中,而不需要重新排列任何位元組。
Windows Phone 8:Windows Phone 8 和更新版本上的 Windows Phone Store 應用程式支援此函式。
Windows 8.1和 Windows Server 2012 R2:Windows 8.1、Windows Server 2012 R2 和更新版本上的 Windows 市集應用程式支援此函式。
範例
下列程式代碼範例示範如何使用 inet_addr 函式。
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
// need link with Ws2_32.lib
#pragma comment(lib, "Ws2_32.lib")
int __cdecl main(int argc, char **argv)
{
//-----------------------------------------
// Declare and initialize variables
WSADATA wsaData;
int iResult;
unsigned long ulAddr = INADDR_NONE;
// Validate the parameters
if (argc != 2) {
printf("usage: %s <IPv4 address>\n", argv[0]);
printf(" inetaddr converts a string containing an\n");
printf(" IPv4 address in one of the supported formats\n");
printf(" to a unsigned long representing an IN_ADDR\n");
printf(" %s 192.168.16.34\n", argv[0]);
return 1;
}
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0) {
printf("WSAStartup failed: %d\n", iResult);
return 1;
}
//--------------------------------
// Call inet_addr(). If the call succeeds,
// the result variable will hold a IN_ADDR
ulAddr = inet_addr(argv[1]);
if ( ulAddr == INADDR_NONE ) {
printf("inet_addr failed and returned INADDR_NONE\n");
WSACleanup();
return 1;
}
if (ulAddr == INADDR_ANY) {
printf("inet_addr failed and returned INADDR_ANY\n");
WSACleanup();
return 1;
}
printf("inet_addr returned success\n");
// Here we could implement code to retrieve each address and
// print out the hex bytes
// for(i=0, ptr= (Char*) &ulAddr; i < 4; i++, ptr++) {
WSACleanup();
return 0;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 8.1、Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | winsock2.h (包括 Winsock2.h、Winsock.h) |
程式庫 | Ws2_32.lib |
Dll | Ws2_32.dll |
另請參閱
IN6_ADDR