OKTALZAHL.CPP
-
Original erstellt von Cupdiffusor:
Ich hab die Technik mit der Maskierung nicht angewandt, weil ich sie
irgendwie nicht richtig verstanden hab....Beispiel einer Maskierung:
char byte_char = '1'; // ASCII-Wert von 1 ist 0x31 if ((byte_char & 0x01) != 0) // Wenn das 1-Wertige Bit gesetzt ist do_something(); else do_something_else();
Wie Peter ja richtig bemerkt hat, zeigt ein Blick auf die ASCII-Tabelle, dass die Zeichen 0 - 9 im Bereich 0x30-0x39 angesiedelt sind. Deshalb kann man hier sogar auf die Umwandlung vom Zeichen in eine Zahl verzichten. Du kannst das Selbe Beispiel aber auch machen, wenn du statt '1' einfach 0x01 zuweist.
Spiel mal etwas mit obigen Snippet. Schau an, was passiert, wenn du unterschiedliche Zahlenwerte für byte_char angibst und vergleich mal mit dem Bitmuster. Im obigen Beispiel ist jetzt eben 0x01 die "Maske".
-junix
[ Dieser Beitrag wurde am 28.05.2003 um 13:34 Uhr von junix editiert. ]
-
Hab mich jetzt doch mal schnell hingesetzt und so aus eigenem Interesse heraus versucht den Code etwas zu straffen. Ausserdem möchte ich Dir zeigen, wie man so ein Thema angehen könnte um sich viele Codezeilen zu sparen. Für 3 Bitmasken mag Deine Vorgehensweise ja noch in Ordnung sein, aber wenn es mehr werden sollten
Mahlzeit
Ich habe jetzt nur mal den reinen Code abgedruckt und die includes weggelassen. Das Array 'import' hab ich extra etwas größer dimensioniert damit es nicht gleich kracht, sollte man mal mehr als nur 3 Ziffern eingeben. Das Ganze soll ja aber auch nur als Beispiel dienen.int main(int argc, char* argv[]) { int x, len; char import[32]; cout << "Rechte (in nummer): "; cin >> import; len=strlen(import); for(x=0; x<len; x++) PrintRights(import[x]); getch(); return 0; } //--------------------------------------------------------------------------- void PrintRights(char c) { char mask=4; char *rights="-xw-r"; for(int x=0; x<3; x++, mask>>=1) cout << rights[c & mask]; }