IP to Hex to Int



  • [code="c"]
    // ConsoleApplication1.cpp: Definiert den Einstiegspunkt für die Konsolenanwendung.
    //

    #include "stdafx.h"
    #include <iostream>
    #include <string.h>
    using namespace std;

    int ip_str2int(char ip[])
    {
    int erg;
    int i = 0;
    int int_octetts[4];
    char *hex[4];
    char delimiter[] = ".";
    char *ptr;
    ptr = strtok(ip, delimiter);
    while (ptr != NULL)
    {
    printf("Oktett gefunden: %s\n", ptr);
    int_octetts[i] = atoi(ptr);
    sprintf(ptr, "%x", int_octetts[i]);
    /if (int_octetts[i] < 16)
    {
    sprintf(ptr, "0%x", int_octetts[i]);
    }
    else
    {
    sprintf(ptr, "%x", int_octetts[i]);
    }
    /

    printf("Der Hexadezimalwert der Dezimalzahl %d ist %s.\n", int_octetts[i], ptr);
    // naechsten Abschnitt erstellen
    hex[i] = ptr;
    ptr = strtok(NULL, delimiter);
    i++;
    }
    strcat(hex[3], hex[2]);
    strcat(hex[1], hex[0]);
    strcat(hex[3], hex[1]);

    erg = strtol(hex[3], NULL, 16);
    printf("%s umgerechnet ergibt: %d.\n",hex[3], erg);
    return EXIT_SUCCESS;
    }

    int main()
    {
    char ip_addr[16];
    printf("Geben Sie eine gueltige IP-Aadresse ein: ");
    //fgets(ip_addr, 16, stdin);
    scanf("%15s", &ip_addr[0]);
    ip_str2int(ip_addr);
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    Hallo alle zusammen,
    ich versuche aktuell ein Programm zu schreiben, dass eine IP als string einliest und diese dann in 4 Oktette aufteilt immer ab ".". Danach sollen die einzelnen Werte in Hexadezimalzahlen umgewandelt werden. Diese sollen dann von hinten nach vorne verkettet werden und dann zusammen als Integer ausgegeben werden. Mein Problem ist allerdings, dass Oktettwerte < 16 nur einstellig ausgegeben werden und damit die Endrechnung falsch ist. Ich habe das ganze schon mit sprintf und "%02x" getestet aber nichts funktioniert. Hat jemand vielleicht eine Idee?


  • Mod

    %02x sollte ganz hervorragend funktionieren. Da es in deinem Programm nicht auftaucht, kann man nicht sagen, was du dabei falsch gemacht hast.

    Dein Programm ist viel, viel, viel zu kompliziert. Hier ist ein Programm, das deiner Beschreibung folgt und funktioniert:

    #include <stdio.h>
    
        int main(void) {
        	int ip[4];
        	scanf("%d.%d.%d.%d", &ip[0],  &ip[1],  &ip[2],  &ip[3]);
        	printf("%02x%02x%02x%02x", ip[0],  ip[1], ip[2], ip[3]);
        	return 0;
        }
    


  • Hallo SeppJ, danke für deinen Lösungsvorschlag. Der Schwerpunkt der Aufgabe liegt darin, dass man die IP als char Array einliest, und die einzelnen Oktette rausfiltert indem man immer bei einem "trennt". "%02x" habe ich in der Zeile: sprintf(ptr, "%x", int_octetts[i]); zu dem Zeitpunkt verwendet. Also sprintf(ptr, "%02x", int_octetts[i]); Die rausgefilterten Oketette sollen dann zu einer Hexadezimalzahl zusammengefügt werden, und dann in einen Int-Wert umgewandelt werden.



  • Man könnte (u.a.) auch schauen, was den Java Leuten dazu einfällt:
    https://stackoverflow.com/questions/17489404/convert-hexadecimal-string-to-ip-address


  • Mod

    nachtfeuer schrieb:

    Man könnte (u.a.) auch schauen, was den Java Leuten dazu einfällt:
    https://stackoverflow.com/questions/17489404/convert-hexadecimal-string-to-ip-address

    Das hilft wie?



  • SeppJ schrieb:

    nachtfeuer schrieb:

    Man könnte (u.a.) auch schauen, was den Java Leuten dazu einfällt:
    https://stackoverflow.com/questions/17489404/convert-hexadecimal-string-to-ip-address

    Das hilft wie?

    Durch Vergleich von Programmiertechniken mehr und grundlegender verstehen, warum deine Antwort so gut und der code oben "viel viel viel zu kompliziert"?


Anmelden zum Antworten