Typedef für 8-Bit Zahlen

napstix

Grünschnabel
Hallo,
kurze Frage mal in die Runde:

Spricht prinzipiell irgend was dagegen, einen Typ für 8-Bit Zahlen aus einem Char zu machen,
oder handele ich mir damit ev. Probleme ein?

typedef unsigned char BYTE;


(Außer dass man dann eventuell später mal irgendwo zusätzlich casten muss, und die Zahlen natürlich nicht größer als 8-Bit sein dürfen).

Würde gerne mal eine Meinung dazu hören.

Grüße
napstix
 
Hi.

Ein unsigned char enthält einen Zahlenwert von 0 bis 255. Warum solltest du Probleme bekommen?

Üblicherweise (so z.B. in windef.h) wird der Typ BYTE als unsigned char definiert.

Gruß
 
Hallo deepthroat,
ja das mit der windef.h - stimmt, aber manchmal fällt der Groschen etwas spät.
Da hätte ich direkt selber draufkomen sollen, mal in ein paar Header-Dateien reinzuschauen.

Windows ist aber nicht so direkt mein Ding, außer dass es auf meinem Rechner läuft :).
Ich kenne Bit, Byte und Word eigentlich aus der SPS-Welt. Damit kann man dort recht komfortabel arbeiten,
danach hört's dann leider auch gleich schon auf.

Der Hintergrund meiner Frage war, dass ich vor längerer Zeit mal üble Probleme mit einem char Typ hatte.
Ich hatte ein paar Testauschriften in ein Programm reingebaut, um den Ablauf besser verfolgen zu können.
Das Programm hatte damals eine leichte Fehlfunktion, wenn zufällig irgendwann ASCII 003 (oder 004 - weiß nicht mehr genau)
mal als einzelnes Zeichen ausgegeben wurde.
Den vermeintlichen Programmfehler habe ich viele Stunden gesucht.
Es lag letztendlich nur an einer einzigen harmlosen cout Ausgabe zum testen, was ich nie verstanden habe.

Seit dem habe ich einfach nie wieder char für Zahlen verwendet.
Wenn es aber unter Windows so verwendet wird, sollte es ja woanders auch funktionieren.
Wir testen die Sache einfach mal an.

In diesem Sinne,
und mit besten Wünschen noch für's neue Jahr.

napstix
 
Hi,

chars mit cout als zahlen auszugeben ist eher nicht gut :-)
cout sucht sich nämlich eigentlich selber aus, wie es das zeug ausgibt - und char wird als buchstabe vom ascii 3 genommen...ich kann mich nicht genau erinnern, aber irgendwas deutsch verständliches ist auf 3 sicher nicht :)

wenn dein char a heisst,
gibs doch einfach mit
printf("%d", a );
aus, ist im stdio.h, falls du es nicht drin hast

gruß

edit: das sollte eigentlich das ganze typedef-problem lösen :-)
 
Zuletzt bearbeitet:
chars mit cout als zahlen auszugeben ist eher nicht gut
cout sucht sich nämlich eigentlich selber aus, wie es das zeug ausgibt - und char wird als buchstabe vom ascii 3 genommen...
ich kann mich nicht genau erinnern, aber irgendwas deutsch verständliches ist auf 3 sicher nicht

Hallo sheel,
genau das war ja das Problem. Eigentlich ist alles was < ASCII 32 nicht zu gebrauchen. Sind nur Steuerzeichen z.B. für Drucker oder serielle Kommunikation.
ASCII 3 und 4 ist wohl extremes Pech, weil das eine bedeutet "End of Transmission" und das andere "End of Text".
Warum aber diese Steuerzeichen das Programm insgesamt so beeinflußt haben, dass es danach keine If und for Schleifen mehr abgearbeitet hat,
konnte (oder wollte) ich dann nicht mehr tiefer ergründen.

Für reguläre Ausgaben, welche später mal im Programm drin bleiben sollen, nehme ich eh' printf() oder manchmal wenn es erforderlich ist, auch cprintf().
Das cout reizt mich nur immer für so schnelle Testausschriften, weil es meistens viel weniger Tipparbeit ist, Bequemlichkeit eben.

Naja, einprägsame Sache sowas. Beim nächsten mal muss man nicht lange danach suchen.

edit: das sollte eigentlich das ganze typedef-problem lösen
... das ist ja bis jetzt noch nicht aufgetaucht. Die BYTES und WORDS verhalten sich zur Zeit ganz unauffällig. :)

Grüße
napstix
 
Zurück