macro inet_addr (wsipv6ok.h)
La funzione inet_addr converte una stringa contenente un indirizzo decimale con punti IPv4 in un indirizzo appropriato per la struttura IN_ADDR .
Sintassi
void inet_addr(
[in] a
);
Parametri
[in] a
Stringa di caratteri con terminazione NULL che rappresenta un numero espresso nello standard Internet ".'' (punteggiata) notazione.
Valore restituito
nessuno
Osservazioni
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 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 stringa di un indirizzo IPv6 in un indirizzo IPv6 binario rappresentato come struttura IN6_ADDR .
Indirizzi Internet
Valori specificati usando ".'' la notazione accetta uno dei moduli seguenti: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 sopra appaiono come "d.c.b.a'". Vale a dire, i byte su un processore Intel vengono ordinati da destra a sinistra.
Le parti che costituiscono un indirizzo in "." possono essere decimali, ottali o esadecimali, come specificato nel linguaggio C. I numeri che iniziano con "0x" o "0X" implicano esadecimale. I numeri che iniziano con "0" implicano 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 a due parti, l'ultima parte viene interpretata come quantità a 24 bit e inserita nella maggior parte dei 3 byte di destra dell'indirizzo di rete. Questo rende il formato di indirizzo a due parti pratico per specificare gli indirizzi di rete 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 Windows Phone Store 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
Requisito | Valore |
---|---|
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 | wsipv6ok.h (includono Winsock2.h, Winsock.h) |
Libreria | Ws2_32.lib |
DLL | Ws2_32.dll |
Vedi anche
IN6_ADDR