Ingo Laabs schrieb:
> meine Werte 126,127,128,129 (die in der zu lesenden Datei stehen) kommen
> zu der im Anhang bebilderten Ausgabe
>
> mit:
>
>
1 | > {
|
2 | > dateilesen.get(zeichen);
|
3 | > cout << zeichen <<"=";
|
4 | > cout << (int) zeichen;
|
5 | > cout << " ";
|
6 | > }
|
7 | >
|
Das kann hinkommen, wenn char per Default ein signed Datentyp ist.
Du solltest es dir zur Regel machen:
* wenn du von einem Zeichen sprichst, ohne dass dich der Bytewert in
irgendeiner Form speziell interessiert, dann benutze char. Einfach nur
char. Das ist zb dann der Fall, wenn es sich einfach nur um Texte
handelt.
* wenn du aber vorhast mit Bytes zu operieren, dann benutze immer
unsigned char. Du bist sonst (hilflos) dem Compiler ausgeliefert, ob der
char als signed oder unsigned ansieht. Auf dem einen Compiler läuft dein
Programm, so wie du dir das vorgestellt hast, auf einem anderen nicht.
In dem Fall castest du zeichen auf int. Da aber char anscheinend signed
war, bleibt natürlich auch das Vorzeichen erhalten.
An dieser Stelle willst du aber eigentlich ja einen Blick auf das Byte
hinter dem char erhaschen. Byte -> unsigned char.
Also vorher Zeichen auf unsigned char umcasten, damit bist du dann ein
eventuelles Vorzeichen los.
cout << (int)(unsigned char) zeichen;
Das kostest auch zur Laufzeit nichts. Dieser cast beeinflusst lediglich,
wie der Compiler die Dinge auffasst und welche Operation er auswählt.