hex in string umwandeln
-
Hi,
in einer unsigned int variable hab ich als Wert eine IP-Addr stehen (z.B. 0x02000002;) -> jetzt möchte ich dass nach jeder Zahl der IP-Addr ein Punkt steht also z.B. 0x02.0x00.0x00.0x02 (bei der letzten Zahl nicht mehr) und das ganze als Zeichen abgespeichert wird (also 0x32 0x2e 0x30 0x2e 0x30 0x2e 0x32)
Wie kann ich das am leichtesten erreichen?
unsigned int ip=0x0f0f0202; char array[] = {0x00, 0x2e, 0x00, 0x2e, 0x00, 0x2e, 0x00};
Gruß
Hans Im Glück
-
sprintf (wohin, "%02x.%02x.%02x.%02x", ip>>24, ip>>16, ip>>8, ip);
wenn's so nicht hinhaut, nach noch überall ein &0xff dran.
-
Die IP liegt als unsigned int vor und soll als char Array abgespeichert werden mit der entsprchenden formatierung.
sprintf (&array[0], "%02x.%02x.%02x.%02x", ip>>24, ip>>16, ip>>8, ip);
-
Hans im Glück schrieb:
Die IP liegt als unsigned int vor und soll als char Array abgespeichert werden mit der entsprchenden formatierung.
sprintf (&array[0], "%02x.%02x.%02x.%02x", (ip>>24) &0xFF, (ip>>16) & 0xFF, (ip>>8) & 0xFF, ip & 0xFF);
mit dieser Version bekomm ich im Array 0x30 0x32 0x2F 0x30 0x30 0x2E ... etc.
würde das mit 0xF statt 0xFF funktionieren? das ich im Array 0x32 0x2F 0x30 0x2F stehen hab?
Hans
-
Hans im Glück schrieb:
Hans im Glück schrieb:
Die IP liegt als unsigned int vor und soll als char Array abgespeichert werden mit der entsprchenden formatierung.
sprintf (&array[0], "%02x.%02x.%02x.%02x", (ip>>24) &0xFF, (ip>>16) & 0xFF, (ip>>8) & 0xFF, ip & 0xFF);
mit dieser Version bekomm ich im Array 0x30 0x32 0x2F 0x30 0x30 0x2E ... etc.
würde das mit 0xF statt 0xFF funktionieren? das ich im Array 0x32 0x2F 0x30 0x2F stehen hab?
Hans
jepp das sollte so funzen
-
leider funktioniert es noch nicht 100%ig. Das Problem ist, dass eine IP-Addr ja (einzelne) Werte bis 255 annehmen kann. Die bekommt man auch in einer char-Stelle unter.
sprintf (&array[0], "%01x.%01x.%01x.%01x", (ip>>24) &0xFF, (ip>>16) & 0xFF, (ip>>8) & 0xFF, ip & 0xFF);
für eine Ip = 2.0.0.1 funktioniert das mit dieser Gleichung - mit einer IP = 128.20.0.1 funktioniert es leider nicht.
Hans
-
Hans im Glück schrieb:
Hans im Glück schrieb:
Die IP liegt als unsigned int vor und soll als char Array abgespeichert werden mit der entsprchenden formatierung.
sprintf (&array[0], "%02x.%02x.%02x.%02x", (ip>>24) &0xFF, (ip>>16) & 0xFF, (ip>>8) & 0xFF, ip & 0xFF);
mit dieser Version bekomm ich im Array 0x30 0x32 0x2F 0x30 0x30 0x2E ... etc.
würde das mit 0xF statt 0xFF funktionieren? das ich im Array 0x32 0x2F 0x30 0x2F stehen hab?
Hans
du willst die hexziffern als ascii-zeichen und die dann als 2-stellige hexzahl?
dann vielleicht so:sprintf (array, "0x%02x 0x2f 0x%02x 0x2f 0x%02x 0x2f 0x%02x 0x2f 0x%02x 0x2f 0x%02x 0x2f 0x%02x 0x2f 0x%02x", '0'+(ip>>28), '0'+((ip>>24)&15), '0'+((ip>>20)&15), '0'+((ip>>16)&15), '0'+((ip>>12)&15), '0'+((ip>>8)&15), '0'+((ip>>4)&15), '0'+(ip&15));
-
Für sowas gibt es ntohl und inet_ntoa. Die Frage ist willst/musst du es "von Hand" machen oder reicht dir einfach nur ein richtiges Ergebniss.