unsigned char* to file



  • ich habe eine aes-verschlüsselung geschrieben, welche einen unsigned char* zurückgibt. das problem was ich jetzt habe ist, wie speicher ich unsigned char* am besten in einem file (einfacher textfile? oder gibts da besseres?).
    ein unsigned char hat ja 2hoch8 werte die er annehmen kann, von daher einfach in char umwandeln und in den file packen is nicht (char hat ja nur ascii 127 zeichen) 😕
    meine bisherige idee war es, jeden unsigned char in seinen hexwert umzuwandeln (char[2], z.B. 0F oder B7) und dann abzuspeichern, allerdings wäre das ja ziemlich unnötiger speicherverbrauch, weil dadurch die anzahl der zeichen verdoppelt wird..

    hab ihr eine idee, wie ich einen unsigned char* am besten speichere?
    was haltet ihr von der idee mit der umwandlung in die hex werte?
    und wie wandelt man eigentlich am schnellsten unsigned char's in ihre hex werte um?



  • hihi, keine Umwandlung nötig. Das ist Interpretationssache (Achtung Halbwissen, kA ob das überall gilt. Es gibt ja mehrere bitweise Repräsentationen, glaube ich).

    unsigned char uc = 200;
    char c = uc;
    unsigned char uc2 = c;
    
    cout << (int)uc << endl; // 200
    cout << (int)c << endl; // -56
    cout << (int)uc2 << endl; // 200
    
    // Also ganz easy:
    unsigned char fileData[] = { 65, 66, 67, 200 };
    
    ofstream file("test.txt");
    
    file.write(reinterpret_cast<char*>(fileData), sizeof(fileData));
    
    file.close();
    


  • hab den code noch nicht getestet, aber reinterpret_cast<> hat da doch auch wenig sinn! wenn ich unsigned char (zahlen von 0-256) in char umwandle(speichert zahlen von 0-127 -> ascii zeichensatz halt 😉 ) geht doch die hälfte verloren, es gibt doch nur 127 zeichen und selbst von denen sind doch soweit ich weiß nur 94 "druckbar"



  • gamer8o4 schrieb:

    ... char umwandle(speichert zahlen von 0-127 ...

    Ne, -128 oder -127 bis 127



  • gamer8o4 schrieb:

    wenn ich unsigned char (zahlen von 0-256) in char umwandle(speichert zahlen von 0-127 -> ascii zeichensatz halt 😉 ) geht doch die hälfte verloren, es gibt doch nur 127 zeichen und selbst von denen sind doch soweit ich weiß nur 94 "druckbar"

    Da geht nichts verloren.
    char ist nicht auf ASCII begrenzt.



  • gamer8o4 schrieb:

    hab den code noch nicht getestet, aber reinterpret_cast<> hat
    da doch auch wenig sinn! wenn ich unsigned char (zahlen von 0-256) in char
    umwandle(speichert zahlen von 0-127 -> ascii zeichensatz halt 😉 ) geht doch
    die hälfte verloren, es gibt doch nur 127 zeichen und selbst von denen sind
    doch soweit ich weiß nur 94 "druckbar"

    Was hat denn der unsigned char mit ASCII zu tun ?

    Natürlich kann man nicht 0-256 als unsigned char speichern. Aber 0-255 🙂

    Soll denn das Ergebnis gelesen oder gedruckt werden ?
    Das sollte man schon wissen ...

    Wenn ja, wäre tatsächlich die hex Darstellung eine gute Idee.

    Wer sagt das eine Textdatei ASCII Zeichen verwenden muss. Unter Windows ist
    das z.B. eher unüblich, obwohl doch auch möglich ...

    http://msdn.microsoft.com/en-us/goglobal/bb964658.aspx


Log in to reply