Ist ein Char immer 1 Byte breit?

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
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?

Beitrag von Bebu » Mi Okt 26, 2011 9:19 pm

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
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
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?

Beitrag von Xin » Mi Okt 26, 2011 9:33 pm

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
In C ist ein Char mindestens 1 Byte groß.
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.

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Ist ein Char immer 1 Byte breit?

Beitrag von oenone » So Okt 30, 2011 11:56 am

wieviel Bit ein Char (und damit ein Byte) hat, bekommst du aus limit.h mit dem Macro CHAR_BIT.

Benutzeravatar
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?

Beitrag von cloidnerux » So Okt 30, 2011 1:19 pm

(und damit ein Byte)
Ein Byte ist auf allen Computern der letzten 20 Jahre 8 Bit breit.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
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?

Beitrag von Bebu » Mo Okt 31, 2011 12:49 pm

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!

Benutzeravatar
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?

Beitrag von Xin » Mo Okt 31, 2011 12:56 pm

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 prüfen willst, dass Du auf einem 8-Bit/Byte-Rechner bist, kannst Du auf CHAR_BIT == 8 prüfen und sizeof( char ) == 1.

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.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Ist ein Char immer 1 Byte breit?

Beitrag von fat-lobyte » Mo Okt 31, 2011 1:56 pm

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.
Du brauchst dir heutzugage glaube ich keine sorgen mehr machen.
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.

Benutzeravatar
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?

Beitrag von Xin » Mo Okt 31, 2011 1:59 pm

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.
int_least8_t entspricht damit char, welcher ebenfalls mindestens 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.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Ist ein Char immer 1 Byte breit?

Beitrag von naums » Mo Okt 31, 2011 7:56 pm

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
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
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?

Beitrag von cloidnerux » Mo Okt 31, 2011 8:01 pm

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)
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.

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

Antworten