다음을 통해 공유


inet_addr 매크로(wsipv6ok.h)

inet_addr 함수는 IPv4 점선 소수점 주소가 포함된 문자열을 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" Octal
"0x4.0x3.0x2.0x10" 16진수
"4.003.002.0x10" 조합
 

inet_addr 함수는 cp 매개 변수에 전달된 문자열에 대해 10진수, 8진수, 16진수 및 혼합 표기법을 지원합니다.

참고 다음 표기법은 Berkeley 소프트웨어에서만 사용되며 인터넷의 다른 곳에서는 사용되지 않습니다. 버클리 소프트웨어와의 호환성을 위해 inet_addr 함수는 아래에 지정된 추가 표기법도 지원합니다.
 
세 부분으로 구성된 주소를 지정하면 마지막 부분은 16비트 수량으로 해석되고 네트워크 주소의 가장 오른쪽 2바이트에 배치됩니다. 이렇게 하면 클래스 B 네트워크 주소를 "128.net.host'로 지정하는 데 3부로 구성된 주소 형식이 편리합니다.

두 부분으로 구성된 주소를 지정하면 마지막 부분은 24비트 수량으로 해석되고 네트워크 주소의 가장 오른쪽 3바이트에 배치됩니다. 이렇게 하면 클래스 A 네트워크 주소를 "net.host'로 지정하는 데 두 부분으로 구성된 주소 형식이 편리합니다.

한 부분만 지정하면 값은 바이트 다시 정렬 없이 네트워크 주소에 직접 저장됩니다.

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 포함)
라이브러리 Ws2_32.lib
DLL Ws2_32.dll

추가 정보

IN6_ADDR

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Winsock 함수

Winsock 참조

inet_ntoa