Compartilhar via


macro inet_addr (wsipv6ok.h)

A função inet_addr converte uma cadeia de caracteres que contém um endereço decimal pontilhado IPv4 em um endereço adequado para a estrutura de IN_ADDR .

Sintaxe

void inet_addr(
  [in]  a
);

Parâmetros

[in] a

Uma cadeia de caracteres terminada em NULL que representa um número expresso no padrão da Internet ".'' Notação (pontilhada).

Retornar valor

Nenhum

Comentários

A função inet_addr interpreta a cadeia de caracteres especificada pelo parâmetro cp . Essa cadeia de caracteres representa um endereço de Internet numérico expresso no padrão da Internet ".'' Notação. O valor retornado é um número adequado para uso como um endereço da Internet. Todos os endereços da Internet são retornados na ordem de rede do IP (bytes ordenados da esquerda para a direita). Se você passar " " (um espaço) para a função inet_addr , inet_addr retornará zero.

No Windows Vista e posterior, a função RtlIpv4StringToAddress pode ser usada para converter uma representação de cadeia de caracteres de um endereço IPv4 em um endereço IPv4 binário representado como uma estrutura IN_ADDR . No Windows Vista e posterior, a função RtlIpv6StringToAddress pode ser usada para converter uma representação de cadeia de caracteres de um endereço IPv6 em um endereço IPv6 binário representado como uma estrutura IN6_ADDR .

Endereços da Internet

Valores especificados usando o ".'' A notação assume uma das seguintes formas:

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

Quando quatro partes são especificadas, cada uma é interpretada como um byte de dados e atribuída, da esquerda para a direita, aos 4 bytes de um endereço da Internet. Quando um endereço da Internet é exibido como uma quantidade de inteiros de 32 bits na arquitetura Intel, os bytes mencionados acima aparecem como "d.c.b.a'". Ou seja, os bytes em um processador Intel são ordenados da direita para a esquerda.

As partes que compõem um endereço na notação "." podem ser decimais, octais ou hexadecimal, conforme especificado na linguagem C. Números que começam com "0x" ou "0X" implicam hexadecimal. Números que começam com "0" implicam octal. Todos os outros números são interpretados como decimais.

Valor do endereço da Internet Significado
"4.3.2.16" Decimal
"004.003.002.020" Octal
"0x4.0x3.0x2.0x10" Hexadecimal
"4.003.002.0x10" Combinação
 

A função inet_addr dá suporte às notações decimal, octal, hexadecimal e mistas para a cadeia de caracteres passada no parâmetro cp .

Nota As notações a seguir são usadas apenas pelo software Berkeley e em nenhum outro lugar na Internet. Para compatibilidade com o software Berkeley, a função inet_addr também dá suporte às notações adicionais especificadas abaixo.
 
Quando um endereço de três partes é especificado, a última parte é interpretada como uma quantidade de 16 bits e colocada no máximo 2 bytes direito do endereço de rede. Isso torna o formato de endereço de três partes conveniente para especificar endereços de rede classe B como "128.net.host"'

Quando um endereço de duas partes é especificado, a última parte é interpretada como uma quantidade de 24 bits e colocada na maioria dos 3 bytes direito do endereço de rede. Isso torna o formato de endereço de duas partes conveniente para especificar endereços de rede classe A como "net.host".

Quando apenas uma parte é fornecida, o valor é armazenado diretamente no endereço de rede sem qualquer reorganização de bytes.

Windows Phone 8: essa função tem suporte para aplicativos da Windows Phone Store no Windows Phone 8 e posterior.

Windows 8.1 e Windows Server 2012 R2: essa função tem suporte para aplicativos da Windows Store em Windows 8.1, Windows Server 2012 R2 e posteriores.

Exemplos

O exemplo de código a seguir mostra como usar a função 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;
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1, Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wsipv6ok.h (inclua Winsock2.h, Winsock.h)
Biblioteca Ws2_32.lib
DLL Ws2_32.dll

Confira também

IN6_ADDR

END_INET

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Funções Winsock

Referência de Winsock

inet_ntoa