inet_addr関数 (winsock2.h)
inet_addr関数は、IPv4 ドット 10 進数アドレスを含む文字列を、IN_ADDR構造体の適切なアドレスに変換します。
構文
unsigned long WSAAPI inet_addr(
const char *cp
);
パラメーター
cp
TBD
戻り値
エラーが発生しない場合、 inet_addr 関数は、指定されたインターネット アドレスの適切なバイナリ表現を含む符号なし long 値を返します。
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 は 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 進数、および混合表記をサポートします。
2 部構成のアドレスを指定すると、最後の部分は 24 ビット数量として解釈され、ネットワーク アドレスの右端の 3 バイトに配置されます。 これにより、クラス A のネットワーク アドレスを "net.host" として指定する場合に、2 部構成のアドレス形式が便利になります。
パートが 1 つだけ指定されている場合、値はバイト再配置なしでネットワーク アドレスに直接格納されます。
Windows Phone 8: この関数は、Windows Phone 8 以降のWindows Phone ストア アプリでサポートされています。
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 を含む) |
Library | Ws2_32.lib |
[DLL] | Ws2_32.dll |
こちらもご覧ください
IN6_ADDR