funzione inet_addr (winsock.h)
La funzione inet_addr converte una stringa contenente un indirizzo decimale punteggiato IPv4 in un indirizzo appropriato per la struttura IN_ADDR .
Sintassi
unsigned long inet_addr(
const char *cp
);
Parametri
cp
TBD
Valore restituito
Se non si verifica alcun errore, la funzione inet_addr restituisce un valore long senza segno contenente una rappresentazione binaria appropriata dell'indirizzo Internet specificato.
Se la stringa nel parametro cp non contiene un indirizzo Internet legittimo, ad esempio se una parte di un indirizzo "a.b.c.d" supera 255, inet_addr restituisce il valore INADDR_NONE.
In Windows Server 2003e versioni successive se la stringa nel parametro cp è una stringa vuota, inet_addr restituisce il valore INADDR_NONE. Se null viene passato nel parametro cp, inet_addr restituisce il valore INADDR_NONE.
In Windows XPand in precedenza se la stringa nel parametro cp è una stringa vuota, inet_addr restituisce il valore INADDR_ANY. Se null viene passato nel parametro cp, inet_addr restituisce il valore INADDR_NONE.
Commenti
La funzione inet_addr interpreta la stringa di caratteri specificata dal parametro cp . Questa stringa rappresenta un indirizzo Internet numerico espresso nello standard Internet ".'' Notazione. Il valore restituito è un numero adatto per l'uso come indirizzo Internet. Tutti gli indirizzi Internet vengono restituiti nell'ordine di rete ip (byte ordinati da sinistra a destra). Se si passa " (uno spazio) alla funzione inet_addr , inet_addr restituisce zero.
In Windows Vista e versioni successive la funzione RtlIpv4StringToAddress può essere usata per convertire una rappresentazione di stringa di un indirizzo IPv4 in un indirizzo IPv4 binario rappresentato come struttura IN_ADDR . In Windows Vista e versioni successive la funzione RtlIpv6StringToAddress può essere usata per convertire una rappresentazione di stringa di un indirizzo IPv6 in un indirizzo IPv6 binario rappresentato come struttura IN6_ADDR .
Indirizzi Internet
Valori specificati con ".'' la notazione accetta una delle seguenti forme:a.b.c.d a.b.c a.b a
Quando vengono specificate quattro parti, ognuna viene interpretata come byte di dati e assegnata, da sinistra a destra, ai 4 byte di un indirizzo Internet. Quando un indirizzo Internet viene visualizzato come quantità integer a 32 bit nell'architettura Intel, i byte indicati in precedenza vengono visualizzati come "d.c.b.a'". Ovvero, i byte in un processore Intel vengono ordinati da destra a sinistra.
Le parti che costituiscono un indirizzo nella notazione "." possono essere decimali, ottali o esadecimali, come specificato nel linguaggio C. I numeri che iniziano con "0x" o "0X" implicano l'esadecimale. I numeri che iniziano con "0" implicano l'ottale. Tutti gli altri numeri vengono interpretati come decimali.
Valore dell'indirizzo Internet | Significato |
---|---|
"4.3.2.16" | Decimal |
"004.003.002.020" | Ottale |
"0x4.0x3.0x2.0x10" | Valore esadecimale |
"4.003.002.0x10" | Combinazione |
La funzione inet_addr supporta le notazioni decimali, ottali, esadecimali e miste per la stringa passata nel parametro cp .
Quando viene specificato un indirizzo in due parti, l'ultima parte viene interpretata come quantità a 24 bit e inserita nella parte più a destra di 3 byte dell'indirizzo di rete. In questo modo il formato degli indirizzi in due parti risulta utile per specificare gli indirizzi di rete della classe A come "net.host".
Quando viene specificata una sola parte, il valore viene archiviato direttamente nell'indirizzo di rete senza ridisporre alcun byte.
Windows Phone 8: questa funzione è supportata per le app dello Store di Windows Phone in Windows Phone 8 e versioni successive.
Windows 8.1 e Windows Server 2012 R2: questa funzione è supportata per le app di Windows Store in Windows 8.1, Windows Server 2012 R2 e versioni successive.
Esempio
Nell'esempio di codice seguente viene illustrato come usare la funzione 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;
}
Requisiti
Client minimo supportato | Windows 8.1, Windows Vista [app desktop | App UWP] |
Server minimo supportato | Windows Server 2003 [app desktop | App UWP] |
Piattaforma di destinazione | Windows |
Intestazione | winsock.h (include Winsock2.h, Winsock.h) |
Libreria | Ws2_32.lib |
DLL | Ws2_32.dll |
Vedi anche
IN6_ADDR