Partager via


fonction inet_addr (winsock2.h)

La fonction inet_addr convertit une chaîne contenant une adresse décimale en pointillés IPv4 en adresse appropriée pour la structure IN_ADDR .

Syntaxe

unsigned long WSAAPI inet_addr(
  const char *cp
);

Paramètres

cp

TBD

Valeur retournée

Si aucune erreur ne se produit, la fonction inet_addr retourne une valeur longue non signée contenant une représentation binaire appropriée de l’adresse Internet donnée.

Si la chaîne dans le paramètre cp ne contient pas d’adresse Internet légitime, par exemple si une partie d’une adresse « a.b.c.d » dépasse 255, inet_addr retourne la valeur INADDR_NONE.

Sur Windows Server 2003 et versions ultérieures, si la chaîne du paramètre cp est une chaîne vide, inet_addr retourne la valeur INADDR_NONE. Si NULL est passé dans le paramètre cp , inet_addr retourne la valeur INADDR_NONE.

Sur Windows XP et les versions antérieures, si la chaîne du paramètre cp est une chaîne vide, inet_addr retourne la valeur INADDR_ANY. Si NULL est passé dans le paramètre cp , inet_addr retourne la valeur INADDR_NONE.

Remarques

La fonction inet_addr interprète la chaîne de caractères spécifiée par le paramètre cp . Cette chaîne représente une adresse Internet numérique exprimée dans la norme Internet « ». notation. La valeur retournée est un nombre qui peut être utilisé comme adresse Internet. Toutes les adresses Internet sont retournées dans l’ordre réseau de l’adresse IP (octets classés de gauche à droite). Si vous passez « » (un espace) à la fonction inet_addr , inet_addr retourne zéro.

Sur Windows Vista et versions ultérieures, la fonction RtlIpv4StringToAddress peut être utilisée pour convertir une représentation sous forme de chaîne d’une adresse IPv4 en adresse IPv4 binaire représentée sous forme de structure IN_ADDR . Sur Windows Vista et versions ultérieures, la fonction RtlIpv6StringToAddress peut être utilisée pour convertir une représentation sous forme de chaîne d’une adresse IPv6 en adresse IPv6 binaire représentée sous forme de structure IN6_ADDR .

Adresses Internet

Valeurs spécifiées à l’aide du « . '' la notation prend l’une des formes suivantes :

a.b.c.d a.b.c a.b a

Lorsque quatre parties sont spécifiées, chacune est interprétée comme un octet de données et affectée, de gauche à droite, aux 4 octets d’une adresse Internet. Lorsqu’une adresse Internet est affichée sous la forme d’une quantité entière 32 bits sur l’architecture Intel, les octets mentionnés ci-dessus apparaissent sous la forme « d.c.b.a ». Autrement dit, les octets d’un processeur Intel sont classés de droite à gauche.

Les parties qui composent une adresse dans la notation « ». peuvent être décimales, octales ou hexadécimales, comme spécifié dans le langage C. Les nombres qui commencent par « 0x » ou « 0X » impliquent une valeur hexadécimale. Les nombres commençant par « 0 » impliquent une octale. Tous les autres nombres sont interprétés comme décimaux.

Valeur de l’adresse Internet Signification
"4.3.2.16" Decimal
"004.003.002.020" Octal
« 0x4.0x3.0x2.0x10 » Valeur hexadécimale
« 4.003.002.0x10 » Combinaison
 

La fonction inet_addr prend en charge les notations décimales, octales, hexadécimales et mixtes pour la chaîne transmise dans le paramètre cp .

Note Les notations suivantes ne sont utilisées que par le logiciel Berkeley, et nulle part ailleurs sur Internet. Pour la compatibilité avec le logiciel Berkeley, la fonction inet_addr prend également en charge les notations supplémentaires spécifiées ci-dessous.
 
Lorsqu’une adresse en trois parties est spécifiée, la dernière partie est interprétée comme une quantité 16 bits et placée dans les 2 octets les plus à droite de l’adresse réseau. Cela rend le format d’adresse en trois parties pratique pour spécifier les adresses réseau de classe B comme « 128.net.host »

Lorsqu’une adresse en deux parties est spécifiée, la dernière partie est interprétée comme une quantité 24 bits et placée dans les 3 octets les plus à droite de l’adresse réseau. Cela rend le format d’adresse en deux parties pratique pour spécifier les adresses réseau de classe A comme « net.host ».

Lorsqu’une seule partie est donnée, la valeur est stockée directement dans l’adresse réseau sans réarrangement d’octets.

Windows Phone 8 : cette fonction est prise en charge pour les applications du Store Windows Phone Windows Phone 8 et versions ultérieures.

Windows 8.1 et Windows Server 2012 R2 : cette fonction est prise en charge pour les applications du Windows Store sur Windows 8.1, Windows Server 2012 R2 et versions ultérieures.

Exemples

L’exemple de code suivant montre comment utiliser la fonction 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;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8.1, Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau | applications UWP]
Plateforme cible Windows
En-tête winsock2.h (inclure Winsock2.h, Winsock.h)
Bibliothèque Ws2_32.lib
DLL Ws2_32.dll

Voir aussi

IN6_ADDR

IN_ADDR

InetNtop

RtlIpv4AddressToString

RtlIpv4AddressToStringEx

RtlIpv4StringToAddress

RtlIpv4StringToAddressEx

RtlIpv6AddressToString

RtlIpv6AddressToStringEx

RtlIpv6StringToAddress

RtlIpv6StringToAddressEx

Fonctions Winsock

Informations de référence sur Winsock

inet_ntoa