Binärdaten in char-Array nach ASCII-String wandeln



  • Hallo,

    ich habe in einem Array aus char's Binärdaten gespeichert.

    Diese Binärdaten möchte ich aber nun in einer Textdatei menschenleserlich (als Hexadezimalzahlen) ausgeben. Dazu muss ich diese natürlich in ASCII wandeln.

    Da es eine Menge an Daten sein kann, wäre meine Frage, ob es eine einfachere Methode gibt, als jedes einzelne char mit Binärdaten per sprintf in ein char zu kopieren, das dann den ASCII Code enthält.

    Gruß

    Shinzo



  • Vielleicht mal mit sprintf und dem Spezifizierer X probieren.



  • Liest du Beiträge eigentlich durch, bevor du darauf antwortest? 😉

    lol...



  • Du kannst mittels fprintf und Spezifierer X direkt in die Datei schreiben ...



  • Ja wie gesagt, dass ich das einzeln durchiterieren kann ist mir bewusst, nur ich hatte eben die Hoffnung, dass es ein Tool gibt, dem ich meinen Array von chars gebe und der mir dann einen Array von chars zurück gibt, die dann ASCII formatiert sind.



  • static inline char intToHexChar(int val)
    {
      if (val>=0 && val<10)return '0'+val;
      if (val>=10 && val<16)return 'a'+val-10;
      return 0;
    }
    
    string charArrayToHex(const char* data,uint size)
    {
      string str(size*2,0);
      for (uint i=0;i<size;i++)
      {
        str[i*2]=intToHexChar(byte(data[i])/16);
        str[i*2+1]=intToHexChar(byte(data[i])%16);
      }
      return str;
    }
    

    Fertig ist das Tool.



  • Dein Tool funktioniert solange, wie die Werte, die im char stehen, nur eine Stelle haben, also 0x0 - 0xF.

    Sobald da aber 0x20 oder 0xAE steht, funktioniert das nicht mehr.

    Oder seh ich das falsch?



  • RyoShinzo schrieb:

    Oder seh ich das falsch?

    Ja. Warum sollte das nicht mehr funktionieren?



  • Wenn du die standardstreams verwendest geht das recht einfach.

    file_to_write << std::hex << (int)data[0];
    for (int i=1;i<lenght_of_data;++i)
      file_to_write << ' ' << std::hex << (int)data[i];
    

    @athar: Ich habs zwar nicht getestet, aber chars sind normalerweise signed und da erhalten Division und Modulo immer das Minus, somit dürfte dein Code nur funktionieren, wenn byte ein uchar ist. Aber da byte nicht definiert ist kompilliert er nicht einmal.



  • RyoShinzo schrieb:

    Liest du Beiträge eigentlich durch, bevor du darauf antwortest? 😉

    lol...

    Ja, und danach habe ich darauf geantwortet.



  • Katharer schrieb:

    Wenn du die standardstreams verwendest geht das recht einfach.

    file_to_write << std::hex << (int)data[0];
    for (int i=1;i<lenght_of_data;++i)
      file_to_write << ' ' << std::hex << (int)data[i];
    

    @athar: Ich habs zwar nicht getestet, aber chars sind normalerweise signed und da erhalten Division und Modulo immer das Minus, somit dürfte dein Code nur funktionieren, wenn byte ein uchar ist. Aber da byte nicht definiert ist kompilliert er nicht einmal.

    Ja, wenn es nen Typedef namens 'byte' gibt, dann ist das auch meist ein unsigned char. Dumm stellen != sexy.


Anmelden zum Antworten