Hexadezimale dargestellter Character aus Datei in Character Variable einlesen



  • Hallo zusammen!

    ich stehe vor folgendem Problem. Ich habe in einer normalen Textdatei hexadezimale Einträge wie den Folgenden:
    0x35
    Diesen Wert möchte ich einlesen und in einer char Variablen speichern. Hat da jemand ne Idee??? Ich bin auf nix sinnvolles gekommen und auch Google hat mir nicht weitergeholfen.
    Hab ich mein Problem vernünftig formuliert??? Sonst nochmal nachfragen.

    Gruß, Hendrik



  • Wenn du über cin direkt nach char schreibst, wird zeichenweise eingelesen, also mußt du einen Umweg über eine int-Variable gehen:

    int ival;
    char cval;
    infile>>ival;
    cval=ival;
    


  • Nein, sorry. Das funzt nicht. In ival stehen dann nur Nullen drinne. In cval auch. Oder hab ich's falsch verstanden?

    In meiner Textdatei stehen mehrere Werte wie folgt:
    0x23
    0x34
    0xa2
    u.s.w.
    Ich dachte man könnte immer eine einzelne Zeile einlesen und diese dann in einen Character verwandeln... nur kenne ich keine Umwandlungsfunktion und mir ist dazu auch nix eingefallen.

    Oder gibt es was einfacheres?

    Gruß,

    Hendrik



  • *grübelt* Eigentlich sollte der i(f)stream die Eingaben so akzeptieren - eventuell musst du aber die Stream-Flags anpassen, damit's etwas wird. (und wenn du mehrere Werte hast, brauchst du eine Schleife)



  • Aber mit
    infile>>ival;
    lese ich doch gleich die ganze Datei ein und stopfe die in eine int Variable.... oder?



  • Nein, damit liest du so weit, wie die Daten als Integer-Wert interpretierbar sind (und in ein int passt nunmal nur ein einziger Zahlenwert zur selben Zeit).



  • OK. Ich hab den Wert jetzt soweit aus der Datei eingelesen. Ich glaube aber dass bei der Übergabe des Int-Wertes an die char-Variable etwas nicht funktioniert. Der int-Wert ist bei mir der hex-Wert des Characters.
    Ich hab schon versucht das mit char(temp2) zu casten, aber auch das funktioniert nicht. Wie mache ich dem Compiler also klar, dass die int-Werte die Hex-Darstellung des Characters sind???

    Gruß,

    /Hendrik



  • Was meinst du denn mit "funktioniert nicht"? Kannst du das bitte etwas präzisieren?



  • würde es eher mit

    (char) temp2;
    

    beim cast versuchen, nicht mit

    char(temp2)
    


  • Vorden schrieb:

    würde es eher mit

    (char) temp2;
    

    beim cast versuchen, nicht mit

    char(temp2)
    

    Wieso das? Die Casts sind technisch gleichwertig - und in C++ ist der zweite häufiger anzutreffen.

    (persönliche Frage: Du bist nicht zufällig mit net verwandt?)



  • Also wenn ich den Int Wert in einen Character schreibe und anschliessend in eine Datei ausgeben lasse, dann stimmen diese character nicht mit denen überein die ich da eigentlich erwarten würde.

    Das Ascii Zeichen 0x38 sollte z.B. einem Punkt entsprechen. In der Hex-Datei erscheint aber ein 0x26, was einem & und damit der dezimalen Darstellung des Characters entspricht.
    Ich muss also irgendwie noch den int10 Wert in einen int16 Wert umwandeln. Dann sollte es funzen...



  • Dann solltest du bei der Ausgabe auch angeben, daß du Hex-Werte ausgeben willst (da reicht ein 'outfile<<hex;' ganz am Anfang, um die nötigen Flags zu setzen)



  • Hab ich probiert. Das geht auch nicht.
    Habmir jetzt überlegt, dass ich das ganze erst mit
    sprintf(&FileHeader,"%x",temp2[0]);
    in eine char Variable schreibe und das dann mit
    target.put(FileHeader);
    in die Ausgabedatei schreibe die target heißt. Aber da kommen auch nicht die Werte raus die ich mir erhofft habe.



  • Ich frag mich warum das mit dem Hex-Flag setzen nicht hinhaut....



  • Zeig doch mal etwas zusammenhängender, was du eigentlich machst (und was für einen Sinn du daran siehst, char-Werte im Hex-Format zu speichern).



  • würde es eher mit

    (char) temp2; // C-Style-Cast
    

    beim cast versuchen, nicht mit

    char(temp2); // Function-Cast
    

    Beides nicht der Hit in C++.
    static_-, oder für harte Fälle reinterpret_cast.


Anmelden zum Antworten