Ist ein Char immer 1 Byte breit?
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Ist ein Char immer 1 Byte breit?
Hallo zusammen,
ich schreibe wieder mal an Dedupe und baue gerade einen Unittest dafür. Ich will eine Zufallsdatei erzeugen lassen und zwar auf das Byte exakt. Wenn ein Char immer und überall genau ein Byte breit ist, dann kann ich es so durchführen, wie ich will, sonst bin ich offen für Alternativvorschläge
ich schreibe wieder mal an Dedupe und baue gerade einen Unittest dafür. Ich will eine Zufallsdatei erzeugen lassen und zwar auf das Byte exakt. Wenn ein Char immer und überall genau ein Byte breit ist, dann kann ich es so durchführen, wie ich will, sonst bin ich offen für Alternativvorschläge
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Ist ein Char immer 1 Byte breit?
In C ist ein Char mindestens 1 Byte groß.Bebu hat geschrieben:Hallo zusammen,
ich schreibe wieder mal an Dedupe und baue gerade einen Unittest dafür. Ich will eine Zufallsdatei erzeugen lassen und zwar auf das Byte exakt. Wenn ein Char immer und überall genau ein Byte breit ist, dann kann ich es so durchführen, wie ich will, sonst bin ich offen für Alternativvorschläge
Ein Byte hat mindestens 8 Bit.
Vielleicht hilft das:
Ein char ist immer genau sizeof( char ) Bytes groß.
Auf einem aktuellen System kannst Du davon ausgehen, dass ein char 1 Byte groß, alleine schon, weil aktuelle Systeme Byteweise adressieren und es keinen anderen "byte"-Datentyp gibt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Ist ein Char immer 1 Byte breit?
wieviel Bit ein Char (und damit ein Byte) hat, bekommst du aus limit.h mit dem Macro CHAR_BIT.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ist ein Char immer 1 Byte breit?
Ein Byte ist auf allen Computern der letzten 20 Jahre 8 Bit breit.(und damit ein Byte)
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Ist ein Char immer 1 Byte breit?
Vielen Dank, es geht mir darum, das ich die Garantie habe, das 1 Char immer ein Byte belegt, wenn ich es in eine Datei schreibe. Allerdings habe ich mir überlegt, einfach einen Unittest dafür einzufügen, sozusagen als Selbsttest, ob die Umgebungsbedingungen wie erwartet sind. Wenn nicht, dann schlägt der Test auf diesem System halt fehl. Wenn er auf allen anderen Systemen funktioniert und nur auf einem exotischen eventuell nicht, dann ist das ziemlich unwichtig oder Zeit für eine Portierung.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Ist ein Char immer 1 Byte breit?
Wenn Du prüfen willst, dass Du auf einem 8-Bit/Byte-Rechner bist, kannst Du auf CHAR_BIT == 8 prüfen und sizeof( char ) == 1.Bebu hat geschrieben:Vielen Dank, es geht mir darum, das ich die Garantie habe, das 1 Char immer ein Byte belegt, wenn ich es in eine Datei schreibe. Allerdings habe ich mir überlegt, einfach einen Unittest dafür einzufügen, sozusagen als Selbsttest, ob die Umgebungsbedingungen wie erwartet sind. Wenn nicht, dann schlägt der Test auf diesem System halt fehl. Wenn er auf allen anderen Systemen funktioniert und nur auf einem exotischen eventuell nicht, dann ist das ziemlich unwichtig oder Zeit für eine Portierung.
Der Test wird vermutlich nirgendwo mehr fehlschlagen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Ist ein Char immer 1 Byte breit?
Du brauchst dir heutzugage glaube ich keine sorgen mehr machen.Bebu hat geschrieben:Vielen Dank, es geht mir darum, das ich die Garantie habe, das 1 Char immer ein Byte belegt, wenn ich es in eine Datei schreibe. Allerdings habe ich mir überlegt, einfach einen Unittest dafür einzufügen, sozusagen als Selbsttest, ob die Umgebungsbedingungen wie erwartet sind. Wenn nicht, dann schlägt der Test auf diesem System halt fehl. Wenn er auf allen anderen Systemen funktioniert und nur auf einem exotischen eventuell nicht, dann ist das ziemlich unwichtig oder Zeit für eine Portierung.
Wenn du es doch tust, könntest du "int8_t" aus <cstdint> verwenden, wenn du C++0x verwendest oder <boost/cstdint.hpp>, wenn du Boost verwendest. Leider ist der int8_t typ nicht garantiert auf jeder Plattform. Dafür allerdings der int_least8_t, der mindestestens 8 bit enthält.
Haters gonna hate, potatoes gonna potate.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Ist ein Char immer 1 Byte breit?
int_least8_t entspricht damit char, welcher ebenfalls mindestens 8 Bit enthält.fat-lobyte hat geschrieben:Wenn du es doch tust, könntest du "int8_t" aus <cstdint> verwenden, wenn du C++0x verwendest oder <boost/cstdint.hpp>, wenn du Boost verwendest. Leider ist der int8_t typ nicht garantiert auf jeder Plattform. Dafür allerdings der int_least8_t, der mindestestens 8 bit enthält.
int8_t ist vermutlich auf Plattformen nicht verfügbar, die mindestens 9 Bit pro Byte haben, also ist der Test nicht durchführbar.
Ich würde Boost hier raushalten. Wozu Abhängigkeiten aufbauen, die einen nicht weiterbringen?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Ist ein Char immer 1 Byte breit?
Ein char ist von der Sache her 8 bit = 1 Byte groß. Wenn du mehr Zeichen brauchst nimmste Unicode, und brauchst die windows.h (somit funktioniert das nur unter Windows, jedenfalls soweit mir bekannt ist) Dort drinnen gibts nen Typ der sich wchar_t nennt, ist 16 bit groß und damit kannst du (fast) jedes Zeichen darstellen, brauchst aber wiederum andere Funktionen als nur printf().
MfG Naums
MfG Naums
.globl truth
truth:
mov r0, #42
mov pc, lr
truth:
mov r0, #42
mov pc, lr
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ist ein Char immer 1 Byte breit?
Die Debatte hier ging nicht direkt über Zeichen und ihre Speicherung, sondern um das allgemeine Problem der Größe einer Variablen, vor allem im Zusammenhang mit dem Auslesen von Dateien, die exakte Feldbreiten benötigen.Ein char ist von der Sache her 8 bit = 1 Byte groß. Wenn du mehr Zeichen brauchst nimmste Unicode, und brauchst die windows.h (somit funktioniert das nur unter Windows, jedenfalls soweit mir bekannt ist)
Unicode Zeichen sind auch in anderen libs als der WinAPI gegeben, darunter Boost, GTK, Qt, etc.
Auch wie der Name schon sagt, wchar_t ist nur ein typedef, also nur eine Umbenennung eines unsigned short oder ähnlichem.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum