inet_addr マクロ (wsipv6ok.h)

inet_addr関数は、IPv4 ドット 10 進数アドレスを含む文字列を、IN_ADDR構造体の適切なアドレスに変換します。

構文

void inet_addr(
  [in]  a
);

パラメーター

[in] a

インターネット標準 ".'' で表される数値を表す NULL で終わる文字列 (点線) 表記。

戻り値

なし

解説

inet_addr関数は、cp パラメーターで指定された文字列を解釈します。 この文字列は、インターネット標準 ".'' で表される数値のインターネット アドレスを表します。 表記。 返される値は、インターネット アドレスとして使用するのに適した数値です。 すべてのインターネット アドレスは、IP のネットワーク順序 (左から右に並べ替えられたバイト数) で返されます。 "" (スペース) を inet_addr 関数に渡すと、 inet_addr は 0 を返します。

Windows Vista 以降では、 RtlIpv4StringToAddress 関数を使用して、IPv4 アドレスの文字列表現を 、IN_ADDR 構造体として表されるバイナリ IPv4 アドレスに変換できます。 Windows Vista 以降では、 RtlIpv6StringToAddress 関数を使用して、IPv6 アドレスの文字列表現を 、IN6_ADDR 構造体として表されるバイナリ IPv6 アドレスに変換できます。

インターネット アドレス

".'' を使用して指定された値 表記には、次のいずれかの形式があります。

a.b.c.d a.b.c a.b a

4 つの部分を指定すると、それぞれがデータのバイトとして解釈され、左から右へ、インターネット アドレスの 4 バイトに割り当てられます。 Intel アーキテクチャでインターネット アドレスが 32 ビットの整数数量と見なされる場合、上記で参照されているバイトは "d.c.b.a" と表示されます。 つまり、Intel プロセッサ上のバイトは右から左に順序付けられます。

"." 表記でアドレスを構成する部分には、C 言語で指定されている 10 進数、8 進数、または 16 進数を指定できます。 "0x" または "0X" で始まる数値は、16 進数を意味します。 "0" で始まる数値は 8 進数を意味します。 その他のすべての数値は、10 進数として解釈されます。

インターネット アドレスの値 意味
"4.3.2.16" Decimal
"004.003.002.020" 8 進変換
"0x4.0x3.0x2.0x10" 16 進数
"4.003.002.0x10" ミックス
 

inet_addr関数は、cp パラメーターで渡される文字列の 10 進数、8 進数、16 進数、および混合表記をサポートします。

メモ 以下の表記は、バークレイソフトウェアでのみ使用され、インターネット上の他の場所では使用されません。 バークレイソフトウェアとの互換性のために、 inet_addr 関数は以下に示す追加の表記もサポートしています。
 
3 部構成のアドレスを指定すると、最後の部分は 16 ビット数量として解釈され、ネットワーク アドレスの右端の 2 バイトに配置されます。 これにより、クラス B のネットワーク アドレスを "128.net.host" として指定する場合に、3 部構成のアドレス形式が便利になります。

2 部構成のアドレスを指定すると、最後の部分は 24 ビット数量として解釈され、ネットワーク アドレスの右端の 3 バイトに配置されます。 これにより、クラス A のネットワーク アドレスを "net.host" として指定する場合に、2 部構成のアドレス形式が便利になります。

パートが 1 つだけ指定されている場合、値はバイト再配置なしでネットワーク アドレスに直接格納されます。

Windows Phone 8: この関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。

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
ヘッダー wsipv6ok.h (Winsock2.h、Winsock.h を含む)
Library Ws2_32.lib
[DLL] Ws2_32.dll

こちらもご覧ください

IN6_ADDR

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Winsock 関数

Winsock リファレンス

inet_ntoa