fonction inet_addr (winsock.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 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 ultérieurement 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 XPand précédemment si la chaîne dans le 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 .
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
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 | winsock.h (inclure Winsock2.h, Winsock.h) |
Bibliothèque | Ws2_32.lib |
DLL | Ws2_32.dll |
Voir aussi
IN6_ADDR