Compartilhar via


função inet_addr (winsock2.h)

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

Sintaxe

unsigned long WSAAPI inet_addr(
  const char *cp
);

Parâmetros

cp

TBD

Retornar valor

Se nenhum erro ocorrer, a função inet_addr retornará um valor longo sem sinal contendo uma representação binária adequada do endereço da Internet fornecido.

Se a cadeia de caracteres no parâmetro cp não contiver um endereço de Internet legítimo, por exemplo, se uma parte de um endereço "a.b.c.d" exceder 255, inet_addr retornará o valor INADDR_NONE.

No Windows Server 2003 e posterior se a cadeia de caracteres no parâmetro cp for uma cadeia de caracteres vazia, inet_addr retornará o valor INADDR_NONE. Se NULL for passado no parâmetro cp , inet_addr retornará o valor INADDR_NONE.

No Windows XP e anterior se a cadeia de caracteres no parâmetro cp for uma cadeia de caracteres vazia, inet_addr retornará o valor INADDR_ANY. Se NULL for passado no parâmetro cp , inet_addr retornará o valor INADDR_NONE.

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 posteriores, 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 posteriores, 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 toma 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 inteiro de 32 bits na arquitetura Intel, os bytes referidos 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 em "." 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 decimal.

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 decimais, octais, 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 da 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 no máximo 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 winsock2.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