Einen String in Hex zerlegen und speichern



  • Hallo Leute,

    ich stehe gerade etwas auf dem schlauch. Ich versuche ein Programm Generisch zu machen, hänge aber an dem letzten Punkt.

    Dem Programm wird beim Start in der Konsole eine MAC-Adresse übergeben.
    programm.exe aabbccddeeff

    Im Programm wird diese MAC-Adresse für den Filter von Pcap genutzt und soll auch als Ziel-Adresse in einem eigenen Ethernet-Paket eingetragen werden.

    Der Filter funktioniert, die Ziel-Adresse nicht. Folgendes will ich erreichen:

    // Dummy, wird später die Ziel-Adresse
    u_char	MAC_controller[ETH_ADDR_LEN]	= {0x00,0x00,0x00,0x00,0x00,0x00};
    

    In diesen Dummy möchte ich nun meine von der Konsole übergebene MAC-Adresse speichern.

    Ein Ansatz den ich hatte war sprintf, nur leider klappt das damit nicht. Folgenden Code hatte ich:

    u_char *a = MAC_controller;
    
    for(0 bis 5)
    sprintf(a+i,"0x%c%c",argv[1][i],argv[1][i+1]);
    

    Leider haut das so nicht hin. Habe auch schon bei google einiges gelesen, nur wirklich eine Lösung dafür konnte ich nicht finden.

    Hat jemand einen Tip oder eine Idee?

    Danke Gruß Nero



  • das sieht so aus als wenn du versuchst zwei zeichen in ein zeichen(u_char) zu stopfen, das geht natürlich nicht.
    des weiteren sollte dir klar sein, das sprintf und diverse andere stringfunktionen eine null als abschlusszeichen an strings anhängen.
    btw ist deine for schleife allenfalls puseudocode aber bestimmt kein c.
    beschreib mal etwas präziser was du vor hast.
    den string in gruppen von je zwei char aufteilen oder je zwei char als hexzahl betrachten und ins dezimale umrechnen? ich tippe mal letzteres.



  • Hallo,

    ja die Schleife ist pseudo Code, sollte nur zeigen das alles in einer schleife läuft.

    Was genau habe ich vor:

    Ich möchte den übergebenen String aabbccddeeff, welcher in argv[1] gespeichert ist in u_char MAC_controller[ETH_ADDR_LEN] Speichern.

    Aus dem String aabbccddeeff möchte ich

    0xaa 0xbb 0xcc 0xdd 0xee 0xff machen und in MAC_controller[...] speichern.

    Danke


  • Mod

    Drei Zeichen Puffer anlegen. Jeweils zwei Zeichen aus der Zeichenkette dort hinein kopieren, letztes Zeichen '\0'. strtol darauf anwenden. Sechsmal wiederholen. Fertig.



  • Nerospeed schrieb:

    Aus dem String aabbccddeeff möchte ich
    0xaa 0xbb 0xcc 0xdd 0xee 0xff machen und in MAC_controller[...] speichern.

    wie ist u_char definiert?



  • sprintf ist die falsche Richtung, (s)scanf passt besser.
    http://ideone.com/Z4ZB1P


Anmelden zum Antworten