frage zu uint8_t und der größe von char
-
hallo,
in meinem programm muss ich gerade einzelne bytes adressieren. dazu verwende ich uint8_t, weil char nicht unbedingt die größe 1 haben muss. ist das so richtig? aber ist dieser typ auch verfügbar, wenn ein char nicht 8 bit hat?
-
Char hat immer die Größe 1. Jedoch muss ein char nicht zwangsläufig aus 8 Bit bestehen.
-
Diese Diskussion hatten wir letztens gerade:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-230620.html
-
depp schrieb:
in meinem programm muss ich gerade einzelne bytes adressieren. dazu verwende ich uint8_t,
Verstehe ich nicht. Eigentlich solltest du zum adressieren ja ein uint8_t* benutzen?
depp schrieb:
weil char nicht unbedingt die größe 1 haben muss. ist das so richtig?
Ich weiss nicht was du huer als "Größe" bezeichnest. Allgemein üblich dürfte das von sizeof sein, und sizeof(char) ist per Definition 1.
depp schrieb:
aber ist dieser typ auch verfügbar, wenn ein char nicht 8 bit hat?
Das hängt sicher vom Compiler ab. Manche könnten den Typen (auch wenn er nativ nicht "da ist") unterstützen weil er halt "üblich" ist, aber verlassen kann man sich da nicht drauf.
-
depp schrieb:
hallo,
in meinem programm muss ich gerade einzelne bytes adressieren. dazu verwende ich uint8_t, weil char nicht unbedingt die größe 1 haben muss. ist das so richtig? aber ist dieser typ auch verfügbar, wenn ein char nicht 8 bit hat?
was ist dein zielsystem/PC?
-
hallo,
Tachyon schrieb:
Char hat immer die Größe 1. Jedoch muss ein char nicht zwangsläufig aus 8 Bit bestehen.
Ich weiss nicht was du huer als "Größe" bezeichnest. Allgemein üblich dürfte das von sizeof sein, und sizeof(char) ist per Definition 1.
danke für den hinweis. ich dachte bisher, dass das nicht garantiert wäre. damit brauche ich dann auchh uint8_t nicht mehr.
Das hängt sicher vom Compiler ab. Manche könnten den Typen (auch wenn er nativ nicht "da ist") unterstützen weil er halt "üblich" ist, aber verlassen kann man sich da nicht drauf.
sprich uint8_t muss von einer c++-implementierung nicht unterstützt werden?
was ist dein zielsystem/PC?
ich versuche ein korrektes c++ programm zu schreiben, dass theoretisch auf allen plattformen korrekt einzelne bytes adressieren und manipulieren kann. imo sollte das mit hilfe von stdint.h möglich sein (und es geht sogar ohne, weil sizeof(char) anscheinend immer 1 ist).
-
depp schrieb:
Das hängt sicher vom Compiler ab. Manche könnten den Typen (auch wenn er nativ nicht "da ist") unterstützen weil er halt "üblich" ist, aber verlassen kann man sich da nicht drauf.
sprich uint8_t muss von einer c++-implementierung nicht unterstützt werden?
Ich muss gestehen für C gesprochen zu haben. Wie es in C++ genau ist, weiss ich nicht (zumal in C++98 eh noch keine uint8_t und Konsorten definiert wurden). In C sind die "exact width integer types" nicht zwingend erforderlich. Würde mich aber wundern wenn man das in C++ anders regeln würde.
-
Tim schrieb:
Ich muss gestehen für C gesprochen zu haben. Wie es in C++ genau ist, weiss ich nicht (zumal in C++98 eh noch keine uint8_t und Konsorten definiert wurden). In C sind die "exact width integer types" nicht zwingend erforderlich. Würde mich aber wundern wenn man das in C++ anders regeln würde.
das wusste ich bisher alles nicht. das war sehr hilfreich. danke.
-
Schau doch mal bei dem Link vorbei, den ich gepostet habe. Da haben wir eigentlich alles zusammengetragen, was definiert ist und wo du das findest.
-
depp schrieb:
sprich uint8_t muss von einer c++-implementierung nicht unterstützt werden?
Ja, das ist so korrekt interpretiert.
Der Typ "uint8_t" muß nur dann definiert sein, wenn CHAR_BIT=8. Aber "char" muß nicht als 8Bit definiert sein! Es gab zumindest Rechner auf denen CHAR_BIT=9 war. Auf so einem Rechner ist der Typ "uint8_t" auch nicht definiert.
-
Ganz unüblich ist ein CHAR_BIT != 8 heute auch nicht.