inet_addr-Funktion (winsock2.h)
Die inet_addr-Funktion konvertiert eine Zeichenfolge, die eine IPv4-Dezimaladresse enthält, in eine richtige Adresse für die IN_ADDR-Struktur .
Syntax
unsigned long WSAAPI inet_addr(
const char *cp
);
Parameter
cp
TBD
Rückgabewert
Wenn kein Fehler auftritt, gibt die inet_addr-Funktion einen wert ohne Vorzeichen zurück, der eine geeignete binäre Darstellung der angegebenen Internetadresse enthält.
Wenn die Zeichenfolge im cp-Parameter keine legitime Internetadresse enthält, z. B. wenn ein Teil einer "a.b.c.d"-Adresse 255 überschreitet, gibt inet_addr den Wert INADDR_NONE zurück.
Wenn die Zeichenfolge im cp-Parameter unter Windows Server 2003 eine leere Zeichenfolge ist, gibt inet_addr den Wert INADDR_NONE zurück. Wenn NULL im cp-Parameter übergeben wird, gibt inet_addr den Wert INADDR_NONE zurück.
Wenn die Zeichenfolge im cp-Parameter unter Windows XP eine leere Zeichenfolge ist, gibt inet_addr den Wert INADDR_ANY zurück. Wenn NULL im cp-Parameter übergeben wird, gibt inet_addr den Wert INADDR_NONE zurück.
Hinweise
Die inet_addr-Funktion interpretiert die durch den cp-Parameter angegebene Zeichenfolge. Diese Zeichenfolge stellt eine numerische Internetadresse dar, die im Internetstandard " ausgedrückt wird. Notation. Der zurückgegebene Wert ist eine Zahl, die für die Verwendung als Internetadresse geeignet ist. Alle Internetadressen werden in der Ip-Netzwerkreihenfolge zurückgegeben (Byte von links nach rechts sortiert). Wenn Sie in " " (ein Leerzeichen) an die inet_addr-Funktion übergeben, gibt inet_addr null zurück.
Unter Windows Vista und höher kann die RtlIpv4StringToAddress-Funktion verwendet werden, um eine Zeichenfolgendarstellung einer IPv4-Adresse in eine binäre IPv4-Adresse zu konvertieren, die als IN_ADDR Struktur dargestellt wird. Unter Windows Vista und höher kann die RtlIpv6StringToAddress-Funktion verwendet werden, um eine Zeichenfolgendarstellung einer IPv6-Adresse in eine binäre IPv6-Adresse zu konvertieren, die als IN6_ADDR Struktur dargestellt wird.
Internetadressen
Werte, die mit dem ".'' angegeben werden Die Notation hat eine der folgenden Formen:a.b.c.d a.b.c a.b.c a
Wenn vier Teile angegeben werden, wird jeder als Byte von Daten interpretiert und den 4 Bytes einer Internetadresse von links nach rechts zugewiesen. Wenn eine Internetadresse in der Intel-Architektur als ganzzahlige 32-Bit-Menge angezeigt wird, werden die oben genannten Bytes als "d.c.b.a" angezeigt. Das heißt, die Bytes auf einem Intel-Prozessor werden von rechts nach links sortiert.
Die Teile, aus denen eine Adresse in der Notation "." besteht, können dezimal, oktal oder hexadezimal sein, wie in der Sprache C angegeben. Zahlen, die mit "0x" oder "0X" beginnen, implizieren hexadezimal. Zahlen, die mit "0" beginnen, implizieren oktal. Alle anderen Zahlen werden als Dezimalwerte interpretiert.
Internetadressenwert | Bedeutung |
---|---|
"4.3.2.16" | Decimal |
"004.003.002.020" | Oktal |
"0x4.0x3.0x2.0x10" | Hexadezimal |
"4.003.002.0x10" | Mischung |
Die inet_addr-Funktion unterstützt die dezimalen, oktalen, hexadezimalen und gemischten Notationen für die im cp-Parameter übergebene Zeichenfolge.
Wenn eine zweiteilige Adresse angegeben wird, wird der letzte Teil als 24-Bit-Menge interpretiert und in den 3 Byte rechts der Netzwerkadresse platziert. Dadurch ist das zweiteilige Adressformat für die Angabe von Netzwerkadressen der Klasse A als "net.host" bequem.
Wenn nur ein Teil angegeben wird, wird der Wert ohne Byteanordnung direkt in der Netzwerkadresse gespeichert.
Windows Phone 8: Diese Funktion wird für Windows Phone Store-Apps auf Windows Phone 8 und höher unterstützt.
Windows 8.1 und Windows Server 2012 R2: Diese Funktion wird für Windows Store-Apps auf Windows 8.1, Windows Server 2012 R2 und höher unterstützt.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der inet_addr-Funktion veranschaulicht.
#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;
}
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 8.1, Windows Vista [Desktop-Apps | UWP-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2003 [Desktop-Apps | UWP-Apps] |
Zielplattform | Windows |
Kopfzeile | winsock2.h (einschließlich Winsock2.h, Winsock.h) |
Bibliothek | Ws2_32.lib |
DLL | Ws2_32.dll |
Weitere Informationen
IN6_ADDR