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 .

Nota Le notazioni seguenti sono usate solo dal software Berkeley e nessun altro posto 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 a tre parti, l'ultima parte viene interpretata come quantità a 16 bit e inserita nella maggior parte destra di 2 byte dell'indirizzo di rete. Questo rende il formato di indirizzo a tre parti pratico per specificare gli indirizzi di rete di classe B come "128.net.host''

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

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Funzioni Winsock

Informazioni di riferimento su Winsock

inet_ntoa