Char um dezimalen Wert vermindern

Ein char ist effektiv nichts anderes als ein 8bit uint, darum kannst du problemlos ein int von einem char abziehen, allerdings führt das zu diversen Problemen, wenn das Ergebnis kleiner als 0 oder grösser als 256 ist.
Der Wert eines char steht für ein Zeichen, nicht für einen Wert, machst du also

char x = 'a';
x = x + 3;

dann bekommst du

x == 'd'

Nachdem auch alle Zahlen in ihrer Representation als char hintereinander stehen, kannst du also auch problemlos damit rechnen.

char x = '1';
x = x + 3;

x == '4';

Machst du aber

char x = '9';
x = x + 3;

bekommst du abhängig vom verwendeten Zeichensatz den Buchstaben, dessen char-Wert um 3 grösser als der char-Wert von 9 ist, also z.B.

x == 'c';

Machst du

char x = '2';
char y = '5';
char z = x - y;

bekommst du

z == 254 bzw. das Zeichen was in deinem Zeichensatz den Wert 254 hat.
 
key darf nur kleiner gleich 10 sein!

hab aber mittlerweile mein Problem gelöst - hab mir herausgesucht, welchen int-Wert der char('1') besitzt.
Code:
//hat leider nicht funktioniert:
c = '9' + (c - key - '1');
//hat funktioniert
c = '9' + (c - key - 47);

Kenn leider den Grund dafür nicht, vielleicht fällt dazu noch jemandem etwas ein, wär eigentlich ganz interessant!

Danke für eure Anregungen und für eure Hilfe!
 
Zurück