Hier werden einige grundlegende Themen wie Zahlensysteme, Zeichensätze und Kodierungen behandelt.
Zahlensysteme
DezimalsystemDatengrößen
Binärsystem
Oktalsystem
Hexadezimalsystem
BitEndianness / Byte-Order
Nibble
Byte
Word
DWord
QWord
Intel / LSB / Little EndianZeichensätze und Zeichenkodierungen
Motorola / MSB / Big Endian
Arten von ZeichensätzenKodierungen
Verbreitete Zeichensätze
ASCII
ANSI / 8-Bit-Zeichensätze
MS-DOS-CodepagesUnicode
Windows-Codepages
ISO 8859
UTF-8
UTF-16
Endianness / Byte Order
Byte Order Mark
Konvertierung in ein anderes ZahlensystemDatumsformate und Zeitformate
Base64
Quoted-Printable
URL Encoding
DOS-Date / DOS-TimeSlack
time_t
FileTime
File-Slack, RAM-Slack und Drive-Slack
MFT-Slack
Partition-Slack
Gefällt dir meine Webseite, meine Freeware-Programme oder Online-Tools?
Dann spende bitte per PayPal und hilf mit, den Inhalt weiterhin kostenlos anbieten zu können - jeder Betrag ist willkommen!
Das Dezimalsystem ist das übliche System um Zahlen darzustellen. Die Basis des Dezimalsystems ist 10 und umfasst die Ziffern 0 bis 9 zur Darstellung der Zahlen.
Das Binärsystem oder auch Dualsystem wird vorwiegend in der elektronischen Datenverarbeitung eingesetzt (Basis 2). Die beiden möglichen Ziffern in einem Binärwert sind 0 und 1. Durch die Aneinanderreihung der Ziffern 0 und 1 lassen sich beliebige Zahlen ausdrücken:
Zahl | Binärwert |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
12 | 1100 |
64 | 1000000 |
128 | 10000000 |
255 | 11111111 |
Das Oktalsystem verwendet nur die Ziffern 0 bis 7 zur Darstellung von Zahlen (Basis 8). Die dezimale Zahl 8 ergibt somit den Oktalwert 10. Dieses System kommt hauptsächlich bei den Dateirechten in Linux-basierten Betriebssystemen und in FTP-Programmen zur Anwendung.
Im Hexadezimalsystem werden die Ziffern 0 bis 9, sowie die Buchstaben A bis F zur Darstellung von Zahlen verwendet (Basis 16). Dabei entspricht "A" der Zahl 10 und "F" der Zahl 15. So lassen sich Zahlen von 0 bis 255, was einem Byte entspricht, mit einem zweistelligen Wert - von "00" bis "FF" - ausdrücken. Da eine hexadezimale Zahl nicht immer von einer dezimalen Zahl zu unterscheiden ist, wird eine hexadezimale Zahl mit vorangestelltem "0x" oder nachgestelltem "h" gekennzeichnet, zum Beispiel 0x47 oder 47h, 0x00 oder 0h.
Ein Bit (engl. binary digit) ist die kleinste mögliche Einheit in der Informationsverarbeitung. Ein Bit kann nur zwei Zustände annehmen - 0 oder 1 (siehe auch Binärsystem).
Ein Nibble besteht aus 4 Bit (ein halbes Byte). Diese Größenangabe ist allerdings kaum gebräuchlich. Ein Nibble kann mit nur einer hexadezimalen Ziffer dargestellt werden.
Ein Byte besteht aus 8 Bit und umfasst so Zahlen im Bereich von 0 bis 255.
Ein Word besteht aus zwei Byte bzw. 16 Bit. Somit können in einem Word Zahlen von 0 bis 65.535 gespeichert werden. Zum Beispiel wird die DOS-Zeit (DOS-Time) in dieser Datengröße auf 2 Sekunden genau gespeichert.
Ein DWord (Double Word) umfasst vier Byte bzw. 32 Bit. Dadurch ergibt sich ein Zahlenbereich von 0 bis 4.294.967.295. In diesem Format werden neben "normalen" Zahlen auch Datums- und Zeitangaben gespeichert.
Ein QWord (Quad Word) besteht aus acht Byte bzw. 64 Bit. In dieser Datengröße werden beispielsweise Festplattenkapazitäten oder besonders genaue Zeitangaben gespeichert.
Bit | Bit | Bit | Bit | Bit | Bit | Bit | Bit |
Nibble | Nibble | ||||||
Byte |
Byte | Byte | Byte | Byte | Byte | Byte | Byte | Byte |
Word | Word | Word | Word | ||||
DWord | DWord | ||||||
QWord |
Beim Speichern bzw. beim Auslesen von Daten ist die Reihenfolge entscheidend, wie die Daten verarbeitet werden. Dies kann von links nach rechts oder umgekehrt erfolgen. Diese Reihenfolge nennt man Endianness oder Byte Order. Man unterscheidet dabei zwei Typen, die Intel und die Motorola Byte Order.
Während DWord-Werte die eine Zahl ausdrücken meist im Intel-Format gespeichert werden, werden Positionsangaben, etwa für Datei-Offsets, normalerweise im Motorola-Format ausgedrückt.
Die Intel Byte Order wird auch LSB (least significant byte first) oder Little Endian genannt. Bei der Intel Byte Order steht das niederwertigste Byte an der linken Stelle und das höherwertigste Byte an der rechten Stelle. So ergibt das Word 0x0100 den Wert 1 und das Word 0x0001 den Wert 256.
Die Motorola Byte Order wird auch MSB (most significant byte first) oder Big Endian genannt. Bei der Motorola Byte Order steht das niederwertigste Byte an der rechten Stelle und das höherwertigste Byte an der linken Stelle. Hier ergibt das Word 0x0001 den Wert 1 und das Word 0x0100 den Wert 256.
Ein Zeichensatz legt fest, welche Zeichen verwendet werden können. Dies sind zum Beispiel Buchstaben, Zahlen, Satz- und Sonderzeichen. In einer Zeichenkodierung wird jedem Zeichen eine eigene Zahl zugewiesen, die man Zeichencode nennt. Der Zeichencode beginnt üblicherweise bei 0 (Null).
Single Byte Character Sets (SBCS) speichern ein Zeichen in einem Byte. Beispiele sind ASCII, MS-DOS- und Windows-Codepages, sowie ISO-8859-Zeichensätze.
Multibyte Character Sets (MBCS) speichern ein Zeichen in unterschiedlich vielen Bytes. Dazu zählen unter anderem UTF-8, UTF-16 und Big5.
Andere Zeichensätze verwenden eine feste Anzahl mehrerer Bytes, wie etwa 2 Bytes bei UCS-2 bzw. UTF-32.
UTF-16 verwendet keine feste Anzahl an Bytes, sondern grundsätzlich 2 Bytes pro Zeichen, kann aber auch 4 Bytes pro Zeichen verwenden.
Der ASCII-Zeichensatz enthält 128 Zeichen. Für deren Speicherung sind 7 Bit erforderlich. Das 8. Bit wird in ASCII nicht verendet. Neben diversen Sonderzeichen sind vor allen die Groß- und Kleinbuchstaben, Zahlen und Satzzeichen enthalten.
8-Bit-Zeichensätze werden auch als ANSI-Zeichensätze bezeichnet. Diese erweitern den ASCII-Zeichensatz indem sie auch das 8. Bit verwenden, wodurch insgesamt 256 Zeichen dargestellt werden können. Die zusätzlichen Zeichen werden meist für nationale Sonderzeichen und andere Symbole verwendet.
437 | Englisch |
708 | Arabisch (ASMO) |
720 | Arabisch (Microsoft) |
737 | Griechisch |
775 | Baltisch |
850 | Westeuropäisch |
852 | Mitteleuropäisch |
855 | Kyrillisch |
857 | Türkisch |
858 | Westeuropäisch mit Euro |
860 | Portugiesisch |
861 | Isländisch |
862 | Hebräisch |
863 | Kanadisches Französisch |
864 | Arabisch (IBM) |
865 | Nordisch |
866 | Russisch |
869 | Griechisch |
874 | Thai |
932 | Japanisch |
936 | Vereinfachtes Chinesisch |
949 | Koreanisch |
950 | Traditionelles Chinesisch |
1200 | Unicode UTF-16 LE |
1201 | Unicode UTF-16 BE |
1250 | Mitteleuropäisch |
1251 | Kyrillisch |
1252 | Westeuropäisch |
1253 | Griechisch |
1254 | Türkisch |
1255 | Hebräisch |
1256 | Arabisch |
1257 | Baltisch |
1258 | Vietnamesisch |
12000 | Unicode UTF-32 LE |
12001 | Unicode UTF-32 BE |
65000 | Unicode UTF-7 |
65001 | Unicode UTF-8 |
ISO 8859-1 | Latin-1, Westeuropäisch |
ISO 8859-2 | Latin-2, Mitteleuropäisch |
ISO 8859-3 | Latin-3, Südeuropäisch |
ISO 8859-4 | Latin-4, Nordeuropäisch |
ISO 8859-5 | Kyrillisch |
ISO 8859-6 | Arabisch |
ISO 8859-7 | Griechisch |
ISO 8859-8 | Hebräisch |
ISO 8859-9 | Latin-5, Türkisch |
ISO 8859-10 | Latin-6, Nordisch |
ISO 8859-11 | Thai |
ISO 8859-12 | (nicht vergeben) |
ISO 8859-13 | Latin-7, Baltisch |
ISO 8859-14 | Latin-8, Keltisch |
ISO 8859-15 | Latin-9, Westeuropäisch |
ISO 8859-16 | Latin-10, Südosteuropäisch |
Unicode ist ein Zeichensatz, der eine variable Anzahl an Bytes pro Zeichen verwendet. Für den Unicode-Zeichensatz werden vor allem die Kodierungen UTF-8 und UTF-16 verwendet, um die Zeichen zu speichern. UTF steht dabei für Unicode Transformation Format.
UTF-8 verwendet eine Folge von 8-Bit-Zahlen (ein Byte) zur Speicherung der Zeichen. Die ASCII-Zeichen werden unverändert gespeichert. Dadurch benötigen Buchstaben, Zahlen und Satzzeichen bei der UTF-8-Kodierung nur jeweils ein Byte pro Zeichen. Alle andere Zeichen, wie etwa nationale Sonderzeichen und Zeichen aus anderen Schriftsystemen, benötigen zwei bis vier Bytes pro Zeichen.
In binärer Schreibweise beginnen alle 1-Byte langen Zeichen mit einer Null. Bei Zeichen mit mehreren Bytes beginnt das erste Byte mit binären Einsen, gefolgt von einer binären Null. Die Anzahl der binären Einsen entspricht der Anzahl der Bytes pro Zeichen.
Umlaut-A (Ä) | 11000011 10000100 |
---|---|
Euro-Zeichen (€) | 11100010 10000010 10101100 |
Teddy Bär (U+1F9F8) | 11110000 10011111 10100111 10111000 |
Wird eine mit UTF-8 gespeicherte Datei als ISO 8859-1 interpretiert, werden UTF-8-Zeichen nicht richtig dargestellt. Beispielsweise würden an Stelle der deutschen Umlaute "ä ö ü" die Zeichen "ä ö ü" angezeigt werden. Wird ein Text in ISO 8859-1 als UTF-8 angezeigt, wird für alle ungültigen Zeichen ein Fragezeichen oder das Zeichen "�" ausgegeben.
UTF-16 verwendet eine Folge von 16-Bit-Zahlen (zwei Bytes bzw. 1 Word) zur Speicherung der Zeichen. Alle Zeichen von U+0000 bis U+FFFF belegen 2 Bytes.
Die Zeichen U+10000 bis U+10FFFF werden in jeweils 4 Bytes gespeichert. Dabei wird vom Zeichencode die Zahl 65536 (0xFFFF) abgezogen. Die daraus entstehende 20-Bit-Zahl wird binär in zwei je 10-Bit lange Blöcke aufgeteilt. Dem ersten Block mit den 10 höherwertigen Bits wird die Bitfolge 110110 vorangestellt. Diese 16-Bit nennt man High Surrogate. Dem zweiten Block mit den 10 niederwertigen Bits wird die Bitfolge 110111 vorangestellt. Diese 16-Bit werden Low Surrogate genannt.
20 Bits (0 bis 19) | |||||||||||||||||||
19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1. Block / höherwertige Bits | 2. Block / niederwertige Bits |
110110 + Bits des 1. Blocks = High Surrogate
110111 + Bits des 2. Blocks = Low Surrogate
Die Byte Order (Endianness) bestimmt die Position der 8 Bit eines ASCII-Zeichens innerhalb der 16 Bit des UTF-16 Words.
Bei Big Endian (UTF-16BE) wird dem ASCII-Zeichen ein 0-Byte vorangestellt,
bei Little Endian (UTF-16LE) wird dem ASCII-Zeichen ein 0-Byte angefügt.
Das High Surrogate Word steht immer vor dem Low Surrogate Word, unabhängig von der Byte Order.
Die Byte Order Mark (kurz BOM) steht am Beginn einer Datei und kennzeichnet die verwendete Zeichenkodierung des nachfolgenden Textes.
Kodierung | Byte Order Mark hexadezimal |
---|---|
UTF-8 | EF BB BF |
UTF-16 BE | FE FF |
UTF-16 LE | FF FE |
UTF-32 BE | 00 00 FE FF |
UTF-32 LE | FF FE 00 00 |
In bestimmten Situationen müssen Binärdaten in andere Zeichen umgewandelt werden. Dies kann technische Gründe, wie etwa die Datenübertragung im Internet, oder aber praktische Gründe, wie bei einem Hexadezimaleditor, haben.
Eine Kodierung ist meist nur die Konvertierung von einem Zahlensystem in ein anderes. Zum Beispiel vom einem dezimalen ASCII/ANSI Zeichencode in das hexadezimale System.
Die dezimalen Zeichencodes des Wortes "Test" würden in verschiedenen Zahlensystemen so dargestellt werden:
Zahlensystem | Basis | Darstellung des Wortes "Test" |
---|---|---|
Dezimal | 10 | 84 101 115 116 |
Hexadezimal | 16 | 54 65 73 74 |
Oktal | 8 | 124 145 163 164 |
Binär | 2 | 01010100 01100101 01110011 01110100 |
Bei der hexadezimalen Schreibweise werden manchmal die Trennzeichen weggelassen, z.B. "54657374".
Base64 (B64) ist eine sehr verbreitete Kodierung. Die Basis dieser Kodierung ist 64, was bedeutet, dass zur Darstellung der Daten 64 Zeichen verwendet werden. Dies sind alle Klein- und Großbuchstaben, die Ziffern 0 bis 9, das Plus-Zeichen (+) und der Schrägstrich (/). Bei der Kodierung werden jeweils 3 Byte Binärdaten in 4 kodierte Zeichen übertragen. Ist das Ergebnis nicht ein Vielfaches von 4, werden die restlichen Zeichen mit einem Gleichheitszeichen (=) aufgefüllt.
Je nach Einsatzzweck kann das Base64-Alphabet, insbesondere die Reihenfolge der Buchstaben und Ziffern, variieren.
Das ist ein Test
Ergibt als Base64:
RGFzIGlzdCBlaW4gVGVzdA==
Quoted-Printable (QP) wird meist im Internet, etwa in E-Mails, verwendet. Dabei werden einige ASCII-Zeichen (0-127) und alle Zeichen von 128-255 kodiert. Die Kodierung wird durch ein Gleichheitszeichen (=) eingeleitet, gefolgt vom Hexadezimalwert des Zeichens. Ein Gleichheitszeichen am Ende einer Zeile maskiert einen bei der Kodierung eingefügten Zeilenumbruch und wird bei der Dekodierung entfernt.
Ein großer Test mit äöü. 5 + 10 = 15 Leerzeichen am Ende
Kodiert als Quoted-Printable ergibt dies:
Ein gro=DFer Test= mit =E4=F6=FC. 5 + 10 =3D 15 Leerzeichen am Ende=20
Um in einer URL reservierte oder ungültige Zeichen zu übergeben, werden diese kodiert. Dazu wird ein Prozentzeichen, gefolgt vom Hexadezimalwert dieses Zeichens verwendet.
.../ein test/äöü/groß/
Ergibt als URL-Kodierung:
.../ein%20test/%C3%A4%C3%B6%C3%BC/gro%C3%9F/
Unter DOS (FAT-16) werden ein Datumswert und ein Zeitwert in jeweils 2 Byte (1 Word oder 16 Bit) gespeichert. Dabei werden die Bits folgendermaßen aufgeteilt:
Bits | Beschreibung |
---|---|
0 - 4 | Tag des Monats (1 bis 31) |
5 - 8 | Monat (1 = Jänner, 2 = Februar, etc.) |
9 - 15 | Jahres-Offset ab 1980 (0 = 1980, 1 = 1981, etc.) |
Bits | Beschreibung |
---|---|
0 - 4 | Sekunden dividiert durch 2 |
5 - 10 | Minute (0 bis 59) |
11 - 15 | Stunde (0 bis 23) |
Das time_t-Format wird als DWord (4 Byte bzw. 32 Bit) gespeichert und wird speziell im UNIX-Bereich verwendet. Es gibt die Anzahl der seit dem 01.01.1970, 00:00:00 Uhr vergangenen Sekunden an und liegt meist in der UTC-Zeit vor.
Wie Windows FileTime ist ein QuadWord (8 Byte bzw. 64 Bit), das die Anzahl der Intervalle von 100 Nanosekunden seit dem 1. Januar 1601 (UTC) enthält.
Der Speicherplatz eines Datenträgers (eines sog. blockorientierten Massenspeichergerätes) wird in Sektoren unterteilt. Üblicherweise verwenden Festplatten 512 Bytes, CDs und DVDs 2048 Bytes und neuere Festplatten und SSDs (Solid-State-Drives) 4096 Bytes pro Sektor.
Cluster sind Gruppen von einem bis zu 128 Sektoren. Cluster werden zur Speicherung von Dateien verwendet, wobei eine Datei immer am Anfang eines Clusters beginnt.
In der nachfolgenden Tabelle wird angenommen, dass ein Cluster aus 8 Sektoren besteht und der Dateiinhalt kein Vielfaches der Sektorgröße ist und innerhalb des 6. Sektors endet. Da die Daten sektorweise auf den Datenträger geschrieben werden, müssen die fehlenden Bytes bis zum Ende des Sektors aufgefüllt werden. Früher wurde dazu ein zufälliger Inhalt des RAM verwendet, was der Grund für die Bezeichnung "RAM-Slack" ist. Der Drive-Slack wird normalerweise nicht überschrieben und beinhaltet meist noch jene Daten, die sich vor der Speicherung der Datei an dieser Stelle befunden haben und früher einer mittlerweile gelöschten Datei zugeordnet waren.
Sektoren 1 - 5 | Sektor 6 | Sektor 7 | Sektor 8 | |
---|---|---|---|---|
Dateiinhalt | Letzter Teil des Dateiinhalts |
RAM-Slack | Drive-Slack | |
File-Slack |
Der File-Slack umfasst den Bereich vom Ende der Datei bis zum Ende des letzten belegten Clusters der Datei (RAM-Slack + Drive-Slack).
Der File-Slack wird auf Deutsch manchmal auch als Datei-Versatz oder Schlupfspeicher bezeichnet.
In NTFS werden die Informationen zu einer Datei in einem File-Record gespeichert. Darin sind Daten wie etwa der Dateiname, die Datei-Zeiten, die Dateigröße und die Position im Dateisystem. Für einen File-Record wird mindestens 1 KB oder die Clustergröße (meist 4 KB) reserviert. Ist die zu speichernde Datei nicht größer als der unbenutzte Speicherplatz im File-Record, wird der Inhalt direkt im File-Record gespeichert. Wird die Datei vergrößert und ist dafür kein Platz mehr im File-Record, wird die Datei im Datenbereich der Partition gespeichert. Im File-Record kann danach der ursprüngliche Dateiinhalt verbleiben.
Als Partitions-Slack wird der ungenutzte Bereich zwischen zwei Partitionen und nach der letzten Partition bis zum Ende des Datenträgers genannt. Waren in diesen Bereichen vor der Partitionierung bereits Daten gespeichert, können diese eventuell erhalten geblieben sein.
Gefällt dir meine Webseite, meine Freeware-Programme oder Online-Tools?
Dann spende bitte per PayPal und hilf mit, den Inhalt weiterhin kostenlos anbieten zu können - jeder Betrag ist willkommen!