Moin Troll19,
In einem Buch im Internet habe ich die automatische Typkonvertierung in C gefunden. Demnach sollte man folgendes schreiben:
char v1 = 'a'; int v2 = v1;
Achtung: int
und char
haben unterschiedliche Wertebereiche! Ein char
ist 8 Bit/1 Byte groß, ein int
üblicherweise 32 Bit/4 Byte. Mit der Zuweisung int v2 = v1;
hast du also einen Wert erzeugt, der erst einmal mit drei Bytes der Wertigkeit 0 beginnt; wenn char
ASCII-kompatibel ist, ist
char v1 = 'a'; /* 0x61 */ int v2 = v1; /* 0x00000061 */
Das heißt umgekehrt auch, dass die Rückkonvertierung char v1 = v2;
potenziell verlustbehaftet ist, wenn v2 > 0xff
.
Bis 0x7f funktioniert das auch so weit. Man bekommt zwar nicht den Hex-Code, aber immerhin den Integerwert.
Du kannst jeden Integerwert auch hexadezimal darstellen lassen.
Über 0x7f hört der Spaß dann auf, weil das höchstwertige Bit als Vorzeichen interpretiert wird.
Das ist eine Besonderheit von C, da ein char
auch ein 8-bittiger Integer wert ist. Wenn du unsigned char
verwendest (oder dem Compiler sagst, dass er char
als unsigned char
kompilieren soll), ist das höchstwertige Bit kein Vorzeichen. Aber im Zeichenkontext spielt das Vorzeichen meiner Erfahrung eh keine Rolle, das heißt, dass z.B. bei Verwendung von ISO-8859-1 folgendes möglich ist:
signed char umlaut = 'ä'; /* 0xe4 in ISO-8859-1 */
Über 0x7f
fängt der Spaß erst richtig an, weil man Zeichenkodierungen berücksichtigen muss 😉
Viele Grüße
Robert