problem mit BYTE
-
typedef unsigned __int8 BYTE; BYTE niederwertigerTeil ( BYTE input ) { return ( input & 0x0f ); } ... cout << niederwertigerTeil ( 0xee ) << endl;[/cpp]
Sollte 0x0e ergeben, ich kriege aber in der Konsole (Windows) eine Note (Symbol) angezeigt. Woran liegt das?
Wenn ich
cout << ( 0xee & 0x0f ) << endl;schreibe, dann wird das richtige Ergebnis : 14 angezeigt.
Ich bin mir sicher ihr könnt helfen, danke!
-
cout << static_cast<int>(niederwertigerTeil ( 0xee )) << endl;
-
Das liegt daran, dass Du einmal das Zeichen mit dem ASCII-Code 0x0e ausgibst und einmal eine Integer-Variable 0x0e. Korrigiere Deinen Code zum Beispiel zu
cout << unsigend( niederwertigerTeil ( 0xee ) ) << endl;oder schau Dir mal den BytePrinter in meinem Posting in diesen Thread an.
Gruß
Werner
-
@Werner Salomon
ich verstehe den Code leider nicht.

static_cast<int>() funktioniert zwar, aber warum nicht static_cast<unsigned __int8>?
Bitte habt Verständnis für meine dämlichen Fragen, aber ich bin Anfänger.
-
NULL_HIRN schrieb:
static_cast<int>() funktioniert zwar, aber warum nicht static_cast<unsigned __int8>?
nun, deshalb:
Werner Salomon schrieb:
Das liegt daran, dass Du einmal das Zeichen mit dem ASCII-Code 0x0e ausgibst und einmal eine Integer-Variable 0x0e.
Nochmal ausführlich: Die Klasse std::ostream - und das cout ist ein Objekt eben dieser Klasse - stellt mehr als einen sogenannten Streaming-Operator zur Verfügung. Nämlich u.a.
ostream& operator<<( char x ); // und ostream& operator<<( int x );beide machen was anderes.
Dazu muss man zunächst wissen dass sich in C++ im Gegensatz zu C Funktionen auch unterscheiden, wenn sie zwar den gleichen Namen aber unterschiedliche Signaturen haben. Zum Beispiel ist
void func( int x ); // was anderes als void func( unsigned x );deshab kann der Compiler auch die beiden Streaming-Operatoren unterscheiden. Bei
unsigend char x = 0x0e; cout << x;passiert also was anderes als bei
int x = 0x0e; cout << x;Im ersten Fall wird der Wert x als Zeichen interpretiert - z.B. ein 0x31 wäre eine '1' - und im zweiten Fall wird x als eine Zahl interpretiert - dann wäre 0x31 eine 49.
Gruß
Werner
-
Ich hab's mal durchgetestet und auf relativ gut verstanden.
Danke dir. :))