Ich möchte eine Uint32 IP-Adresse in eine verkettete Zeichenfolge konvertieren.C++ Konvertieren von Uint32 IP-Adresse in Text x.x.x.x
In diesem Prozess bekomme ich uint8 Daten, aber ich muss dies zu const char * ändern, um es mit anderen Teilen der IP verketten zu können, um die volle IP in einer Variablen zu drucken.
Wie kann ich die Uint 8 in const char * ändern? Oder gibt es einen besseren Weg für den gesamten Umwandlungsprozess?
uint32 ipAddress = GetHostIp();
if (ipAddress)
{
const int NBYTES = 4;
uint8 octet[NBYTES];
int x;
char *ipAddressFinal;
for (x = 0; x < NBYTES; x++)
{
octet[x] = (ipAddress >> (x * 8)) & (uint8)-1;
}
for (x = NBYTES - 1; x >= 0; --x)
{
if (NBYTES==4)
{
const char *IPPart = octet[x]; // HERE IS THE BUG!!!!! ?
strcpy(ipAddressFinal, IPPart);
}
else
{
const char *IPPart = octet[x]; // HERE IS THE BUG!!!!! ?
strcat(ipAddressFinal, IPPart);
}
if (x > 0)
strcat(ipAddressFinal, ".");
}
LogAlways("IP: %s", ipAddressFinal);
}
bearbeiten
Danke Jungs - Problem gelöst! Dank an alle! Es ist großartig, in einer kurzen Wartezeit sehr gute Antworten zu erhalten! Vor allem dank Lacrymology !!! Hier arbeitet jetzt Code, und ich weiß nicht Linux verwende ich hätte mein OS etc aufschrieb ...
if (ipAddress)
{
const int NBYTES = 4;
uint8 octet[NBYTES];
char ipAddressFinal[16];
for(int i = 0 ; i < NBYTES ; i++)
{
octet[i] = ipAddress >> (i * 8);
}
sprintf(ipAddressFinal, "%d.%d.%d.%d", octet[3], octet[2], octet[1], octet[0]);
LogAlways("IP: \"%s\"", ipAddressFinal);
}
Bitte formatieren Sie den Code - es ist nicht lesbar – ssmir
Ich glaube, Sie haben ein paar Dinge über C++ Strings und Zeiger zu lernen. –
FYI, Ihr Arbeitscode hatte einen Fehler darin. Ihr 'ipAddressFinal []' wurde nur 15 Bytes zugewiesen, aber mit dem Nullabschlusszeichen kann es 16 Bytes sein. Jedes Feld hat bis zu 3 Zeichen, also 3 + 1 + 3 + 1 + 3 + 1 + 3 + 1 = 16. Ich habe es so bearbeitet, dass die Leute den Fehler nicht ausschneiden und einfügen. –