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 .

Nota Le notazioni seguenti sono usate solo dal software Berkeley e nessun'altra parte su Internet. Per la compatibilità con il software Berkeley, la funzione inet_addr supporta anche le notazioni aggiuntive specificate di seguito.
 
Quando viene specificato un indirizzo in tre parti, l'ultima parte viene interpretata come quantità a 16 bit e inserita nella parte più a destra di 2 byte dell'indirizzo di rete. In questo modo il formato degli indirizzi in tre parti risulta utile per specificare gli indirizzi di rete della classe B come "128.net.host''

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

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Funzioni Winsock

Informazioni di riferimento su Winsock

inet_ntoa