also ich da mal zwei c fragen: 1. was ist der unterschied zwischen "char" und "const char" ich weiss das ich mit der zweiten version dem compiler sage, dass die variable einen festen wert hat und nicht verändert wird aber welchen vorteil bringt mir das? 2. wo liegt der unterschied zwischen "BYTE" und "CHAR" bzw. "Unsigned Char"? für mich ist ein char ein byte..
Zu 1: const heisst nur, dass der Compiler dich anmeckert, wenn du versuchst, in diese Variable zu schreiben. In anderen Programmiersprachen gibt es dazu echte Konstanten, in C allerdings nicht, d.h auch eine const-Variable ist letztendlich nur eine Variable. Zu 2: Ein BYTE ist gemäss Definition immer 8 Bit breit. Ein CHAR ist so gross, dass es ein einzelnes Zeichen des von der Zielmaschine verwendeten Zeichensatzes aufnehmen kann. Wir sind uns 8-Bit Zeichensätze gewöhnt. Bei UNICODE allerdings ist ein Zeichen 16 Bit breit. Somit können in Unicode über 65000 Zeichen dargestellt werden, mit unserem mickrigen ANSI-Zeichensatz lediglich deren 255. Unsigned bedeutet lediglich, dass der Wert vorzeichenlos behandelt wird, also der Wertebereich 0 bis zur Obergrenze geht. Dies ist vor allem bei Vergleichen (z.B. x < 0 bei einer unsigned Variable ist quatsch) zu berücksichtigen. Bei Variablen ohne dem unsigned Attribut wird normalerweise das höchstwertige Bit für das Vorzeichen verwendet. Gruss Christian
hey super danke... zu 2: also wenn ich das dann richtig verstehe sollte ich um flexiblen code zu schreiben und ich weiss das mein bereich zwischen 0-255 liegt besser ein byte nehmen...mit flexible meine ich leicht portable auf andere controller deren zeichensatz auf dem unicode beruht. Um z.b der gefahr zu entgehen mehr also nötigen speicher zu reservieren.
Im Prinzip hast du durchaus recht, bloss gibt es in C keinen dedizierten Datentypen, um ein BYTE darzustellen. Wenn du aber mit einem eigenen typedef operierst kannst du durch eine einfache Anpassung deines typedef Befehls deinen Datentypen BYTE an jeden Compiler anpassen. Für "übliche" Systeme, bei denen halt ein char 8 Bit breit ist müsstet du folgenden Typedef irgendwo in einem Headerfile einbauen: typedef unsigned char BYTE; Wenn du jetzt konsequent den Datentypen BYTE für 8-Bit Variablen verwendest, dann ist die Portierung auf jedes andere Zielsystem ein Kinderspiel.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.