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!


Anmelden zum Antworten