Binäre Bytedaten speichern. Mit char* oder CByteArray? Umwandlung von cha* in CString



  • Vielleicht eine nich eindeutig zu beantwortende Frage, doch für Anfänger wie ich einer bin helfen eure Kommentare dazu, mich für das richtige zu entscheiden.

    Also: Ich habe Bytedaten im Binärformat, vielleicht so 50'000 Bytes. Soll für die effiziente Speicherung ein CByteArray verwndet werden, oder doch lieber ein char*?

    apropos char*. Habe da noch folgendes Problem:

    int len = 10;
        char* pOut = new char[len];
        BYTE by = 'A';
    
        int i=0;
        for(i; i<len; i++){
            pOut[i] = by;
            by++;
        }
        cerr<<"pOut: "<<pOut<<endl;
    

    Das Ergebnis ist 'ABCDEFGHIJ'.

    Wenn ich jetzt das Resultat in ein CString mechen will... Gibt es nun noch eine schnellere, elegantere und somit bessere Lösung als diese hier?

    CString str;
     int i=0;
     while(pOut!='\0'){
      str+=pOut[i];
      i++;
     }
     cerr<<str<<endl;
    

    Apropos: DAS oben geht gar nicht. Was mach' ich falsch? 😡



  • Wo setzt du denn eine '\0' ans Ende von pOut?



  • estartu_de schrieb:

    Wo setzt du denn eine '\0' ans Ende von pOut?

    Ah crap, habs beim Tippen vergessen.
    Nach der for-schlaufe. Daher auch die Auslagerung von 'int i'

    int len = 10;
        char* pOut = new char[len];
        BYTE by = 'A';
    
        int i=0;
        for( i=0; i<len; i++){
            pOut[i] = by;
            by++;
        }
        pOut[i] = '\0';
        cerr<<"pOut: "<<pOut<<endl;
    

    So jetzt noch das Interessante:

    CString s;
        i=0;
        while(pOut[i]!='\0'){
         s.Insert(s.GetLength()+1, pOut[i]);
         i++;
        }
    
        AfxMessageBox(s);   // hat den richtigen Wert
        cerr<<s<<endl;      // hat ein crap-wert.
    


  • Okay, dann ist mir klar, warum es nicht geht. 🙂

    Du legst ein Array[10] an.
    Du füllst es von [0] bis [9] mit Buchstaben.
    Dann packst du an [10] eine \0.

    Und jetzt denken wir gaaaaaaanz dolle an die Grundlagen: Wieviel Platz ist in einem Array[10]? 😉



  • estartu_de schrieb:

    Okay, dann ist mir klar, warum es nicht geht. 🙂

    Du legst ein Array[10] an.
    Du füllst es von [0] bis [9] mit Buchstaben.
    Dann packst du an [10] eine \0.

    Und jetzt denken wir gaaaaaaanz dolle an die Grundlagen: Wieviel Platz ist in einem Array[10]? 😉

    ja da hast du vollkommen recht! trotzdem. Fülle ich es wie oben in ein CString und gebe den Inhalt mittels MessageBox() aus. erscheint der Inhalt. Wenn ichs an die Konsole leite - erhalte ich ... eine Adresse? I jsut have no idea...



  • Von cerr und cout habe ich null Ahnung - das habe ich noch nie gebraucht. 😞
    Was passiert, wenn du es stattdessen mit TRACE oder printf versuchst?

    Also:

    TRACE(pOUT + "\n");
    printf("%s\n", pOut);
    

    🙂



  • estartu_de schrieb:

    Von cerr und cout habe ich null Ahnung - das habe ich noch nie gebraucht. 😞
    Was passiert, wenn du es stattdessen mit TRACE oder printf versuchst?

    Also:
    printf("%s\n", pOut);[/cpp]

    jo, printf geht. Nun ja. Eiiiigentlich will ich ja cout auch nicht benutzen, aber es war nur so ein Testkonsolen Programm - und wenn der Inhalt mit cerr/cout nicht richtig funktioniert, muss man doch annehmen, dass irgendwas nicht sauber abgeht 🕶

    Hey estartu_de, hast du auch noch eine Meineung zum Thema char* oder CByteArray?
    Danke für deine Hilfe man.



  • Ein char* ist sicherlich speicherschonender, was bei der Datenmenge, die du da hast ja langsam interessant wird.

    Ist die Datenmenge (also Byteanzahl) denn vorher bekannt?
    Wenn ja, dann würde ich es wohl erstmal mit dem char* versuchen.

    Andererseits ist ein CByteArray so schön bequem in der Handhabung. Man muss nicht auf Zeiger achten, über die Grenzen hinaus kann man auch nicht schreiben und irgendwie ist es bequemer...

    Ich habe grade mal geguckt - sooooo speicherfressend sieht das gar nicht aus und intern ist es nur ein BYTE*.

    Ich würde das CByteArray nehmen. 🙂

    PS: Hab meinen Beitrag grade nochmal gelesen - hoffentlich isser nicht zu durcheinander, weil ich einfach meinen Gedankengang runtergeschrieben habe. 😃



  • estartu_de schrieb:

    Ich würde das CByteArray nehmen. 🙂

    DAS wollte ich lesen. Danke. hehe.


Anmelden zum Antworten