1. ホーム
  2. C++

C++ inet_pton, inet_ntop 関数

2022-02-19 09:48:45
<パス
  • ヘッダーファイル
    ウィンドウズの下で
    #include <WS2tcpip.h>
    linuxの場合。
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include<arpa/inet.h>
  • inet_pton関数
    ドット付き10進数文字列をネットワークバイトオーダーの2進数値に変換します。この関数は、IPv4アドレスとIPv6アドレスの両方を扱える。
    第一引数には AF_INET または AF_INET6 を指定することができる。
    第2パラメータは、ドット付き10進文字列:へのポインタである。
    第3引数は、ネットワークのバイトオーダーを変換したバイナリ値へのポインタである。
  • inet_ntop関数
    inet_pton関数とは逆に、inet_ntop関数はネットワークのバイトオーダーの2進数値をドット付き10進数文字列に変換します。
    第一引数には AF_INET または AF_INET6 を指定する。
    第2パラメータは、ネットワークバイトオーダーのバイナリ値へのポインタである。
    第3パラメータはドット付き10進文字列に変換された文字列へのポインタです。
    第4引数は、この関数が呼び出し元のバッファをオーバーフローさせた場合に備えて、ターゲットのサイズを指定するものである。
  • サンプル
#include 

#include 

int main (void)
{
	char IPdotdec[20]; // store the dotted decimal IP address
	struct in_addr s; // IPv4 address structure
	// input IP address
	printf("Please input IP address: ");
	scanf("%s", IPdotdec);
	// Convert
	inet_pton(AF_INET, IPdotdec, (void *)&s);
	printf("inet_pton: 0x%x\n", s.s_addr); // note the byte order obtained
	// reverse conversion
	inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
	printf("inet_ntop: %s\n", IPdotdec);
}