inet_addr función (winsock2.h)
La función inet_addr convierte una cadena que contiene una dirección decimal de puntos IPv4 en una dirección adecuada para la estructura de IN_ADDR .
Sintaxis
unsigned long WSAAPI inet_addr(
const char *cp
);
Parámetros
cp
TBD
Valor devuelto
Si no se produce ningún error, la función inet_addr devuelve un valor long sin signo que contiene una representación binaria adecuada de la dirección de Internet especificada.
Si la cadena del parámetro cp no contiene una dirección de Internet legítima, por ejemplo, si una parte de una dirección "a.b.c.d" supera los 255, inet_addr devuelve el valor INADDR_NONE.
En Windows Server 2003 y versiones posteriores si la cadena del parámetro cp es una cadena vacía, inet_addr devuelve el valor INADDR_NONE. Si se pasa NULL en el parámetro cp , inet_addr devuelve el valor INADDR_NONE.
En Windows XP y versiones anteriores si la cadena del parámetro cp es una cadena vacía, inet_addr devuelve el valor INADDR_ANY. Si se pasa NULL en el parámetro cp , inet_addr devuelve el valor INADDR_NONE.
Comentarios
La función inet_addr interpreta la cadena de caracteres especificada por el parámetro cp . Esta cadena representa una dirección numérica de Internet expresada en el estándar de Internet ".'' Notación. El valor devuelto es un número adecuado para su uso como una dirección de Internet. Todas las direcciones de Internet se devuelven en el orden de red de ip (bytes ordenados de izquierda a derecha). Si pasa " " (un espacio) a la función inet_addr , inet_addr devuelve cero.
En Windows Vista y versiones posteriores, la función RtlIpv4StringToAddress se puede usar para convertir una representación de cadena de una dirección IPv4 en una dirección IPv4 binaria representada como una estructura de IN_ADDR . En Windows Vista y versiones posteriores, la función RtlIpv6StringToAddress se puede usar para convertir una representación de cadena de una dirección IPv6 en una dirección IPv6 binaria representada como una estructura IN6_ADDR .
Direcciones de Internet
Valores especificados mediante ".'' la notación toma una de las siguientes formas:a.b.c.d a.b.c a.b a.b a
Cuando se especifican cuatro partes, cada una se interpreta como un byte de datos y se asigna, de izquierda a derecha, a los 4 bytes de una dirección de Internet. Cuando una dirección de Internet se ve como una cantidad de enteros de 32 bits en la arquitectura Intel, los bytes mencionados anteriormente aparecen como "d.c.b.a".". Es decir, los bytes de un procesador Intel se ordenan de derecha a izquierda.
Las partes que componen una dirección en notación "." pueden ser decimales, octales o hexadecimales como se especifica en el lenguaje C. Los números que comienzan por "0x" o "0X" implican hexadecimal. Los números que comienzan por "0" implican octal. Todos los demás números se interpretan como decimales.
Valor de dirección de Internet | Significado |
---|---|
"4.3.2.16" | Decimal |
"004.003.002.020" | Octal |
"0x4.0x3.0x2.0x10" | Hexadecimal |
"4.003.002.0x10" | Combinación |
La función inet_addr admite las notaciones decimales, octales, hexadecimales y mixtas para la cadena pasada en el parámetro cp .
Cuando se especifica una dirección de dos partes, la última parte se interpreta como una cantidad de 24 bits y se coloca en los 3 bytes más a la derecha de la dirección de red. Esto facilita el formato de dirección de dos partes para especificar las direcciones de red de clase A como "net.host".
Cuando solo se da una parte, el valor se almacena directamente en la dirección de red sin ninguna reorganización de bytes.
Windows Phone 8: esta función es compatible con las aplicaciones de Windows Phone Store en Windows Phone 8 y versiones posteriores.
Windows 8.1 y Windows Server 2012 R2: esta función es compatible con las aplicaciones de la Tienda Windows en Windows 8.1, Windows Server 2012 R2 y versiones posteriores.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar la función 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 | Value |
---|---|
Cliente mínimo compatible | Windows 8.1, Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | winsock2.h (incluya Winsock2.h, Winsock.h) |
Library | Ws2_32.lib |
Archivo DLL | Ws2_32.dll |
Consulte también
IN6_ADDR