unsigned char als HEX-Wert ausgeben
-
Eigentlich sagt der Titel ja schon was ich machen will - ich habe einen unsigned char *, den ich in eine Textdatei ausgeben will. Allerdings nicht die Zeichen an sich sondern deren hex-Code. Wie mache ich das?
SendBuffer = (unsigned char*)malloc(BufferSize + 4); ... LogText << ": Geschrieben: " << ChartoHex(&SendBuffer[i]); ... ofstream LogFile("log.txt"); // Log-File öffnen for (i=0 ; i <= FoundErrors ; i++) { LogFile << LogText.rdbuf(); // alles rein } ...Da fehlt mir jetzt nur noch die Methode CharToHex()...
-
char wird per Default als Zeichen dargestellt, wenn du den dahinterliegenden ASCII-Wert als Zahl haben willst, mußt du ihn nach int casten (und um diesen int-Wert als Hex-Zahl auszugeben, gibt es den Manipulator 'hex'):
LogText << ": Geschrieben: " << hex <<(int)SendBuffer[i];
-
Das funktioniert schonmal!
Allerdings würde ich das gern in eine extra Funktion packen, weil ich, wenn der übergeben Wert kleiner gleich 0xFH ist, eine 0 voran stellen würde. Dafür müsste ich aber den Rückgabetyp wissen, mit "int" meckerter....
Wie kriege ich das hin, das die Buchstaben als Großbuchstaben dargestellt werden?
-
Das kann man auch alles in die Anweisung mit reinpacken:
LogText << ": Geschrieben: " << setw(2)/*Breite>=2*/ << setfill('0') /*Auffüllen mit 0*/ << uppercase /*Ausgabe in Großbuchstaben*/ << hex <<(int)SendBuffer[i];(btw: abgesehen von setw() bleiben alle Einstellungen erhalten, bis sie überschrieben werden oder der Stream aus dem Scope fällt)
-
Vielen Dank, funktioniert wunderbar!