istringstream >> unsigned char unkorrekt



  • Hallo!

    istringstream iss("123");
    
    unsigned char chara;
    iss >> chara;
    
    cout << (int)chara << endl; // 49 ?!
    

    Warum dieses?





  • Wenn du den Stream in einen unsigned char ausgibst, wird nur das erste Zeichen (bzw. an der aktuellen Position des Lesezeigers) dort gespeichert, also '1' . Und das hat nun mal den ASCII-Wert 49.



  • Ist dies ein Sonderfall? In ein unsigned int passt ja auch mehr als iss("1234") ...



  • DreamMe schrieb:

    Ist dies ein Sonderfall?

    Wenn du Sonderfall insofern meinst, als char (und wchar_t ) von den Streams anders gehandhabt werden als die anderen integralen Typen, dann ja.

    DreamMe schrieb:

    In ein unsigned int passt ja auch mehr als iss("1234") ...

    Was meinst du genau mit diesem Vergleich?



  • Naja, du hast gemeint dass bei iss >> unsigned char nur ein Zeichen geschrieben wird.
    Ich dachte aber, dass "123" in eine Ganzzahl gewandelt und dann erst in unsigned char geschrieben wird...

    Es ist also ein Sonderfall, dass nur ein Zeichen in ein unsigned char geschrieben wird?

    Aber zB. bei iss >> unsigned long werden ja mehr als 4 Zeichen eingelesen...

    iss("12345");

    iss >> unsigned char (Geschrieben: '1' als Zeichen);
    iss >> unsigned long (Geschrieben: 12345 als Ganzzahl);

    Ach, jetzt wo ich es so aufschreibe, liegt es daran dass unsigned char vom stringstream anders behandelt wird? Wie ein Zeichenspeicher also, nicht wie eine Ganzzahl...



  • PureDream schrieb:

    Ach, jetzt wo ich es so aufschreibe, liegt es daran dass unsigned char vom stringstream anders behandelt wird? Wie ein Zeichenspeicher also, nicht wie eine Ganzzahl...

    genau so verhält es sich - hättest du auch ohne schreiben rausbekommen können:

    Nexus schrieb:

    Wenn du Sonderfall insofern meinst, als char (und wchar_t) von den Streams anders gehandhabt werden als die anderen integralen Typen, dann ja.

    bb


Anmelden zum Antworten