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 .
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