共用方式為


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 參數中傳遞之字串的十進位、八進位、十六進位和混合表示法。

注意 下列表示法僅供聯機軟體使用,且因特網上沒有其他位置。 為了與 Berkeley 軟體相容, inet_addr 函式也支援下面指定的其他表示法。
 
指定三部分位址時,最後一個部分會解譯為16位數量,並放在最右邊的網路位址2個字節中。 這讓三部分位址格式方便將類別 B 網络位址指定為 “128.net.host''

指定兩部分位址時,最後一個部分會解譯為24位數量,並放在最右邊的網路位址3個字節中。 這可讓兩部分位址格式方便將類別 A 網路位址指定為 「net.host』。

只指定一個部分時,值會直接儲存在網路位址中,而不需要重新排列任何位元組。

Windows Phone 8:Windows Phone 8 和更新版本上的 Windows Phone Store 應用程式支援此函式。

Windows 8.1Windows 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

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Winsock 函式

Winsock 參考

inet_ntoa