kleines Hex Problem

2fast4you87

Erfahrenes Mitglied
will den hex code von str als ascii speichern das klappt so weit das er nur 6C umwandelt und dann keinen neuen wert für hexi nimmt, sprich er schreibt 2 mal den wert für 6C anstatt den wert für 6C6F ...

habt ihr da ne Ahnung ?

Code:
...

string str = "6C6F";
lang = str.length();

for(int h=0;h<lang;h++){
str4 = str[h];
str4+= str[h+1];

ss << hex << str4;
ss >> hexi; 

out.put(hexi);


str4="";
h++;
}



out.close();

...
 
Zuletzt bearbeitet:
2fast4you87 hat gesagt.:
will den hex code von str als ascii speichern das klappt so weit das er nur 6C umwandelt und dann keinen neuen wert für hexi nimmt, sprich er schreibt 2 mal den wert für 6C anstatt den wert für 6C6F ...
Also irgendwie versteh ich das nicht ganz. Du möchtest den String "6C6F" als 6C6F ausgeben? Ja, warum gibst du den String dann nicht einfach aus?
Code:
out << str;
 
ähm nein
der code hat einen string da steht
z.B 6C6F drinne,
dieser code wird eingelesen und als Hex Code verarbeitet.
Dann in int ausgeben sprich aus HEX 6C wird ASCII 108 und das ist das Zeichen l
und aus HEX 6F wird ASCII 106 also das Zeichen j.
nur er liest nur das erste Hex Zeichen ein also 6C und schreibt dann 2 mal ll anstatt lj .
das ist mein Problem.
 
Aha. OK.

Also das erste Problem ist das du ja immer 2 Zeichen auf einmal verarbeiten willst - allerdings inkrementierst du h nur um einen Wert. Das heißt deine Schleife wird für "6C", "C6" und "6F" durchlaufen.

Dann, und das ist wohl der gravierendste Fehler, prüfst du nicht ob die Eingabe überhaupt erfolgreich war. Trotzdem verwendest du den Wert der Variable hexi - obwohl nicht klar ist ob dieser Wert überhaupt richtig eingelesen wurde. Das Einlesen klappt vermutlich bei dir nur 1 mal, weil der Stringstream in einen Fehlerzustand geht, da auf EOF getroffen wurde nachdem die ersten 2 Zeichen gelesen wurden. Somit kannst du versuchen sooft einzulesen wie du willst, der Wert von hexi wird sich nicht ändern. (man könnte den Zustand wieder klären indem man ss.clear () aufruft).

Code:
string str = "6C6F";

for (int h = 0; h < str.length ()-1; h += 2) {
  stringstream ss (str.substr (h, 2));
  int i;
  
  if (ss >> hex >> i) {
    // der hex-Wert im Stringstream ss
    // wurde erfolgreich in i eingelesen.
    if (!out.put (i)) {
       // Ausgabefehler!
       cerr << "Konnte nicht nach 'out' schreiben.\n";
       return 2;
    }
  } else {
    // es gab einen Lesefehler:
    cerr << "Konnte den Wert '" << str.substr (h, 2) <<
         "' nicht als Hex-Wert einlesen.\n";
    return 1;
  }
}

In meiner Schleife brauche ich nicht ss.clear () aufrufen, da jedesmal innerhalb der Schleife der Stringstream sowieso neu initialisiert wird (und das Programm außerdem bei einem Fehler sofort abbricht.)
 
Zurück