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