byte fuer byte lesen > un/signed char.. egal?



  • Hallo Zusammen,

    wenn ich mit Hilfe von ifstream eine Datei binaer lesen moechte, der Buffer
    dazu verwendet wird ist doch egal ob es :

    char buffer[size] ;
    unsigned char buffer[size] ;
    

    deklariert ist oder? beide sind 1 byte*size.. und die datei wird ja binaer
    gelesen..

    Gruss,



  • Hallo,

    also in den meisten Fällen ist das wahrscheinlich wirklich egal. Aber es gibt auch durchaus Beispiele, wo solche Sachen einem ordentlich auf die Nerven gehen.

    Willst du z.B. später irgend etwas mit diesen Werten machen, und sie dafür vorher z.B. auf int casten, dann erhältst du je nachdem ob das erste Bit eine 1 oder eine 0 ist eben eine negative oder eine positive Zahl. Wenn das bei dir kein Problem ist, gut. Ich persönlich würde dazu tendieren, unsigend char zu nehmen. Ist aber denke ich nur Geschmacksache, ich hab mich eben schon mal ne Weile rumgeärgert bis ich den Fehler gefunden hatte, und das lag eben damals daran dass ein char als negative Zahl interpretiert wurde, obwohl ich das nicht so wollte.



  • char ist doch normalerweise unsigned, oder? Der ASCII-Zeichensatz geht ja von 0 bis 255 und nicht von -128 bis 127.
    Folglich hast du in deinem Code zwei Mal das gleiche, jsbach.



  • Nexus schrieb:

    char ist doch normalerweise unsigned, oder?

    Das ist dem Compiler überlassen. Bei einigen ist es standardmäßig 'signed'. Die meisten Compiler bieten die Möglichkeit, das per Compileroptionen umzustellen.



  • Nexus schrieb:

    char ist doch normalerweise unsigned, oder? Der ASCII-Zeichensatz geht ja von 0 bis 255 und nicht von -128 bis 127.
    Folglich hast du in deinem Code zwei Mal das gleiche, jsbach.

    Wenn man's genau nimmt geht der ASCII Zeichensatz von 0 - 127. 🙂



  • Nexus schrieb:

    char ist doch normalerweise unsigned, oder? Der ASCII-Zeichensatz geht ja von 0 bis 255 und nicht von -128 bis 127.
    Folglich hast du in deinem Code zwei Mal das gleiche, jsbach.

    ASCII = 7 Bit
    ANSI = 8 Bit

    (http://de.wikipedia.org/wiki/Ascii)



  • Gast343 schrieb:

    Hallo,
    Willst du z.B. später irgend etwas mit diesen Werten machen, und sie dafür vorher z.B. auf int casten, dann erhältst du je nachdem ob das erste Bit eine 1 oder eine 0 ist eben eine negative oder eine positive Zahl. Wenn das bei dir kein Problem ist, gut. Ich persönlich würde dazu tendieren, unsigend char zu nehmen.

    Danke fuer die ausfuehrliche Info. Ja, also ich werde eine sound file lesen(binaer data). Es wird in der Hinsicht bei der Ausgabe nichts gecastet.

    Konrad Rudolph schrieb:

    Die meisten Compiler bieten die Möglichkeit, das per Compileroptionen umzustellen.

    In der Tat... mit der Option

    -funsigned-char
    -fsigned-char
    

    http://gcc.gnu.org/onlinedocs/gcc-4.2.2//gcc/C-Dialect-Options.html

    Gruss,


Anmelden zum Antworten