7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Web Development

Zahlensystem: Was ist das? Eine praktische Einführung in die Basiscodierung

Read Time: 11 mins

German (Deutsch) translation by Federicco Ancie (you can also view the original English article)

Früher lernen wir, an unseren Fingern zu zählen - beginnend mit 1-5, dann 1-10, und wenn Sie als Kleinkind besonders lustig sind, lernen Sie bis 20, 30 und weiter zählen. Niemand versucht jemals, uns aufzuklären, dass wir tatsächlich komplexere mathemetische Annahmen treffen. Wir alle kennen Dezimalsystem, um genau zu sein.

In diesem Artikel werden wir zunächst ein umfassenderes Verständnis von Dezimalsystem und seiner Struktur erlangen und dann die Binärdatei (Dualsystem, die Bausteine des Rechnens) diskutieren. Zum Schluss sprechen wir noch über Base32 und Base64. In jeder Phase werden wir die Vorteile und Verwendungen für jeden Typ diskutieren.


Warum Dezimalsystem

Wir haben 10 Finger.

Warum haben wir uns für Dezimalsystem entschieden? Es liegt nicht daran, dass die Buchstabenformen 0-9 existieren; Das war eigentlich ein Ergebnis der Wahl von Dezimalsystem. In der Tat ist es höchstwahrscheinlich aufgrund des Lernprozesses, den wir oben entschieden haben - wir haben 10 Finger. Dies erleichtert das Verständnis des Systems erheblich.

Lassen Sie uns ein wenig darüber sprechen, wie Dezimalsystem tatsächlich strukturiert ist. Dies wird die Grundlage für das Verständnis sein, das wir in der nachfolgenden Diskussion verwenden werden.

Ab 0 zählen wir bis 9 und füllen die Spalte "1". Sobald die Eins-Spalte voll ist (9 hat), ist dies das Maximum für die Spalte. Also gehen wir zur nächsten Spalte (links) und beginnen bei 1. In jeder Hinsicht können wir postulieren, dass es vor unserer ersten signifikanten Spalte unendlich viele führende Nullen gibt. Mit anderen Worten ist "000008" dasselbe wie "8". Wenn also jede Spalte voll ist, wird die nächste Spalte um eins erhöht, und wir beginnen wieder mit der vorherigen Spalte, um sie auf die gleiche Weise wie zuvor wieder zu füllen. Insbesondere erhöht sich die 1s-Spalte von 0 bis 9, und dann werden der Zehner-Spalte weitere zehn hinzugefügt. Dies wird fortgesetzt, und wenn die Zehner-Spalte bei 9 und die 1s-Spalte bei 9 liegt, wird 1 zur 100er-Spalte hinzugefügt und so weiter. Wir alle kennen dieses Stück Pizzle.

Betrachten Sie die Zahl 1020. Ausgehend von rechts können wir dies als "0*1 + 2*10 + 0*100 + 1*1000" verstehen. Betrachten Sie nun die Zahl 5.378. Wir können dies als "8*1 + 7*10 + 3*100 + 5*1000" verstehen. Eine verallgemeinerte Funktion zum Verständnis von Dezimalsystem lautet also wie folgt:

(10 hochgezogen von rechts -1) * (die in der Spalte gefundene Zahl)

Wenn daher in der 5. Spalte von rechts eine 6 steht, ist 10^4*6=60.000.

Wir können sehen, dass dies eine verallgemeinerbare Formel zum Verständnis aller Basissysteme ist.


Dualsystem (Binärsystem)

Aus diesem Grund werden diese Systeme als Basis (N) bezeichnet.

Das nächste System, über das wir sprechen werden, ist Dualsystem oder binär. Binärzahl besteht aus zwei Ziffern, 0 und 1. Dies eignet sich aus vielen Gründen gut für das Rechnen, vor allem, weil Computer auf Switches mit zwei Zuständen angewiesen sind: Ein oder Aus. Binär ist das grundlegendste System, das für alle logischen Operationen benötigt wird (denken Sie an "wahr" und "falsch").

Wie funktioniert Binär? Nehmen Sie die Formel von oben und verwenden Sie statt zehn zwei. Aus diesem Grund werden diese Systeme als Basis (N) bezeichnet.

(2 erhöht von rechts -1 auf die Potenz der Spalte -1) * (die in der Spalte gefundene Zahl)

Nehmen wir also die beliebige Zahl 1001101 in Binärform und wenden diese Formel an.

(1 * 1) + (0 * 2) + (1 * 4) + (1 * 8) + (16 * 0) + (32 * 0) + (64 * 1)=77

"Warte!",- denken Sie. "Wenn Binärsystem ist alles, woraus Computer bestehen, wie würden Sie Buchstaben in Binärform schreiben?" Gute Frage. Dies bringt uns tatsächlich zu unserer Einführung von Hexadezimalsystem.


Hexadezimalsystem

Es wäre stattdessen eine einstellige Darstellung von 10.

Stellen wir uns für einen Moment vor, wir hätten 11 Finger. Wir würden natürlich ein System von Base11 verwenden. Abgesehen davon, dass es derzeit unangenehm schwer vorstellbar ist, welche anderen Auswirkungen hätte dies? Die vielleicht wichtigste Implikation ist, dass wir in der 1s-Spalte ein weiteres Inkrement über 9 hinaus gehabt hätten. Aber es wäre keine "10", da 10 nicht auf die 1s-Spalte beschränkt ist. Es wäre stattdessen eine einstellige Darstellung von 10. Und genau so funktionieren Buchstaben in Basissystemen jenseits von Dezimalsystem bis Base62, mit einigen Einschränkungen (auf die wir später noch eingehen werden, wenn wir über Base32 sprechen).

Stellen wir uns vor, Sie verwenden Base11, ersetzen aber die oben beschriebene einstellige "10" durch ein Großbuchstaben A. Wie würden wir die Nummer 54 schreiben?

Da wir wissen, dass die erste Spalte von links die Spalte "11" ist, würden wir zunächst 54 durch elf teilen, was uns 4 mit einem Rest von 10 ergibt. Wenn "A" 10 darstellt, würde in Base11 die Zahl 54 dargestellt als 4A.

Machen wir das umgekehrt mit der Formel, die wir zuvor verwendet haben.

(11 hochgezogen von rechts - 1) * (die in der Spalte gefundene Zahl)

In diesem Fall würde das bedeuten:

(1 * A) + (4 * 11)

Ersetzen Sie nun A durch 10:

(1*10) + (4*11) = 54

Hexadezimal

Wie ist das nützlich, fragen Sie sich? Base11 ist möglicherweise nicht unbedingt nützlich (es sei denn, Sie haben eine Datenstruktur, die von einem Base11-System profitieren würde). Hexadezimalsystem wird jedoch in allen Computersystemen für mehrere Zwecke verwendet. Hexadezimalsystem wird auch als hexadezimal bezeichnet und verwendet die Zahlen 0-9, gefolgt von den Buchstaben a-f (ohne Berücksichtigung der Groß- und Kleinschreibung). Insbesondere werden Hexadezimalzahlen zum Definieren von RGB-Farben in CSS (und in den meisten Farbauswahl-Widgets in Desktop-Software) mit zwei Ziffern für jeden der Kanäle Rot, Grün und Blau angezeigt.

So würde beispielsweise #A79104 r = A7, g = 91, b = 04 erzeugen. In Dezimalstellen wäre dies äquivalent zu r = 167, g = 145, b = 4; Die resultierende Farbe wäre goldgelb. Zwei hexadezimale Ziffern zusammen können 256 verschiedene Zahlen darstellen, und daher gibt es 256^3 (16,777,216) mögliche Zahlenkombinationen im hexadezimalen RGB-System, die nur aus 6 Zeichen bestehen (oder 3, wenn Sie die Verknüpfungsmethode verwenden, wobei jede der drei Ziffern verwendet wird) wird implizit verdoppelt (zB #37d == #3377dd).

Hexadezimalsystem wird häufig in Assemblersprachen verwendet, der Programmiersprache der niedrigsten Ebene. Da Hexadezimalzahlen einfach in Binärdateien konvertiert werden können, können Sie Assembler-Code-Anweisungen einfacher schreiben.

Hinweis: Gleiches gilt im Allgemeinen für die Beliebtheit von Base32 und Base64. Diese Codierungen werden verwendet, weil sie für Binärdaten von Natur aus besser sind (weil sie Zweierpotenzen sind) und weil auf fast jedem Computer mindestens 64 sichere Zeichen (und nicht 128 sichere Zeichen) vorhanden sind.

Nehmen Sie für ein hexadezimales Beispiel die Zahl 1100 hexadezimal, was 4352 dezimal entspricht. Die gleiche binäre Zahl ist 0001 0001 0000 0000. Das Konvertieren von hexadezimal in binär ist eine einfache Operation unter Verwendung einer Konvertierungstabelle, wobei 0 in hexadezimal 0000 in binär und F in hexadezimal 1111 in binär ist.

Beachten Sie, dass die Nullen links von der ersten Zahl bedeuten, dass die Binärzahl in Bits angegeben ist, wobei die Nullen ganz links einfach leere Spalten sind. Grundsätzlich werden diese nicht benötigt; Sie werden jedoch fast ausschließlich auf Binärdateien stoßen, die auf diese Weise geschrieben wurden. Diese Vorgehensweise wird als Auffüllen bezeichnet und wird praktiziert, da die Länge der Daten unbekannt ist und daher Probleme verursachen kann, wenn mehrere Datenübertragungen auftreten. Durch Auffüllen der letzten Zeichenfolge wird garantiert, dass die Datengröße beispielsweise 4 Bit lang ist (für Binärdaten). Das Auffüllen tritt auch in anderen häufig verwendeten und spezifikationsbasierten Codierungsschemata auf; Insbesondere verwenden Base32 und Base64 beide das Gleichheitszeichen ("=") zum Auffüllen.


Base32

Man könnte annehmen, dass Base32 die Zahlen 0-9 und dann die ersten 22 Buchstaben des Alphabets (bis zu V) sind.

Erinnerst du dich, als wir den Vorbehalt oben erwähnt haben? Dies ist die Einschränkung: Die am häufigsten akzeptierte Base32-Definition ist eine Codierung, die mit den ersten 26 Buchstaben des Alphabets beginnt und mit den Zahlen 2-7 endet. Dies ist in der Anforderung von Kommentaren (RCFC) 4648 der Internet Engineering Task Force definiert, in der auch Hexadezimalsystem und Base64 definiert sind. Beachten Sie, dass der Unterschied darin besteht, dass die Codierung für 0 A und nicht 0 ist. Um eine Zeichenfolge in Base32 zu codieren, werden die folgenden Anweisungen ausgeführt.

Zunächst wird die zu codierende Zeichenfolge in 5-Byte-Blöcke (40 Bit in Binärform) aufgeteilt. Buchstaben werden in ASCII (dem Standard für Computer) durch 8-Bit-Blöcke dargestellt, sodass pro 5 Buchstaben 40 Bit vorhanden sind. (Diese 8-Bit-Definition für jeden Buchstaben ermöglicht insgesamt 255 Zeichen in ASCII.)

Teilen Sie diese 40 Bits als Nächstes in 8 Fünf-Bit-Blöcke auf. Für jeweils 5 Buchstaben müssen also 8 Blöcke in base32 codiert werden. Ordnen Sie jeden dieser Blöcke einer 5-Bit-Zeichenzuordnung im Base32-Alphabet zu. Wenn der Fünf-Bit-Block beispielsweise 00010 (oder Dezimalzahl 2) ist, ist das zugeordnete Zeichen der Buchstabe c. Wenn der Fünf-Bit-Block 01010 (Dezimal 10) ist, ist das zugeordnete Zeichen der Buchstabe K.

Wenden wir diese Schritte auf die Zeichenfolge "yessir" an.

Charakter ASCII-Dezimalzahl 8-Bit-ASCII-Binärdatei
y 89 01111001
e 101 01100101
s 115 01110011
s 115 01110011
i 105 01101001
r 114 01110010

Nehmen wir die binären Darstellungen und verketten sie jetzt, indem wir sie in 5-Bit-Gruppen aufteilen

Ein Hinweis zu dem oben Gesagten: Da die Spezifikation definiert, dass die Codierung in Blöcken von 8 5-Bit-Stücken erfolgen muss, müssen wir mit 0 auffüllen, wenn die Anzahl der Bits nicht durch 5 geteilt werden kann (daher 010 (00) an die zweite Zeile) und mit =, wenn die Anzahl der Chunks nicht durch 8 teilbar ist. Die "Null" -Werte werden durch das Füllzeichen "=" ersetzt.

Jede dieser 5-Bit-Binärzahlen wird einem Zeichen im 32-Bit-Alphabet zugeordnet. Insbesondere wäre die Ausgabe für yessir PFSXG43JOI ======

Ein ähnlicher Vorgang wird für Base64 durchgeführt. Es gibt einige grundlegende Unterschiede zwischen Base32 und Base64. Base64 enthält die Buchstaben A-Z, a-z, die Zahlen 0-9 und die Symbole + und /. Wie bereits erwähnt, wird das Symbol "=" zum Auffüllen verwendet. Die Unterschiede bestehen hauptsächlich darin, dass bei allen Buchstaben zwischen Groß- und Kleinschreibung unterschieden wird und alle Ziffern verwendet werden (anstelle der Teilmenge 2-7). Die Symbole + und/werden ebenfalls hinzugefügt.

Der Base64-Codierungsprozess verwendet 24-Bit-Zeichenfolgen (3 Buchstaben) und zerlegt sie in vier 6-Bit-Blöcke, wobei die resultierende Binärzahl dem Base64-Alphabet zugeordnet wird. Schauen wir uns also unser vorheriges Beispiel an, die Zeichenfolge "yessir".

Es gibt ein paar wichtige Dinge zu beachten. Erstens unterscheidet Base64 zwischen Groß- und Kleinschreibung. Zweitens war keine Bitauffüllung erforderlich, da die Anzahl der Bits (48) durch 6 teilbar war. Die Anzahl der 6-Bit-Chunks war ebenfalls durch vier teilbar (was auch bedeutet, dass die Anzahl der Eingabezeichen durch 3 teilbar war), sodass auch kein Null-Auffüllen ("=") erforderlich war.


Eine Zusammenfassung von Base16, Base32 und Base64

Diese binärfreundlichen Basen werden in allen Programmierstrukturen genutzt.

Diese binärfreundlichen Basen werden in allen Programmierstrukturen genutzt. In diesen Basen werden Binärdaten codiert, um die Wiedergabetreue sicherzustellen und Fehler zu blockieren, die durch versehentliche nicht codierte Binärdatenübertragung entstehen können. Sie basieren auf standardbasierten Zeichentabellen und funktionieren garantiert nur, wenn sowohl der Codierer als auch der Decodierer dieselbe Tabelle verwenden. Zum Beispiel gibt es allgemein akzeptierte modifizierte Versionen von Base32, einschließlich einer von Douglas Crockford, die einige der akzeptablen Zeichen ändert, einschließlich des Buchstabens "u", um unbeabsichtigte Obszönität zu vermeiden.


Kodierung in der Praxis

Base32 und Base64 werden nicht nur regelmäßig mit Hexadezimalzahlen für CSS-Farben verwendet, sondern auch konsistent im Web verwendet. Obwohl der offizielle Codierungsprozess für Base32 und Base64 die Größe der Zeichenfolge aufbläht, kann die Codierung von Zahlen in Base64 oder Base32 für Dinge wie die URL-Verkürzung sehr nützlich sein, bei denen eine URL möglicherweise auf/foo/id verweist. Berücksichtigen Sie die folgenden Dezimalzahlen und ihre Base32- und Base64-Entsprechungen.

Dezimal Base16 Base32
20 U U.
50 bs y
967 6h PH
745619 WYET C2CT
7241930 G5AGK boDK
798312345192 xhpr7lti LnfH65o

Wie Sie sehen können, bietet die Verwendung von Base64 oder Base32 zur Zahlenverkürzung erhebliche Vorteile. Wenn jedes Zeichen zählt, können Sie mit diesen Basiscodierungen Zeichen speichern. In vielen Fällen ist die codierte Nummer ungefähr halb so lang wie die nicht codierte Nummer.


Ein Hinweis zu Base62 und Url-Modified Base64

Welche anderen Arten von Webanwendungen würden Sie für diese Codierungen verwenden?

Wenn Sie Base64 die Nummer 959 codieren, ist das Ergebnis O/. Natürlich ist dies aufgrund des "/" kein url-sicherer Wert, daher wird eine auf O/ verweisende URL nicht als O/dekodiert, sondern als O (dies ist der Dezimalwert 14). Es würde auch den Zweck zunichte machen, das "/" als ASCII-Code-Äquivalent (% 47%) zu codieren, da dies die URL erheblich verlängert. Zwei Hauptlösungen haben sich ergeben, um dieses Problem zu bekämpfen. Eine ist eine url-sichere Variante von Base64, die + und/durch _ bzw. _ ersetzt. Außerdem wird die Angabe zum Hinzufügen von = Zeichen zum Auffüllen entfernt. Die andere Möglichkeit besteht darin, zu einer Base62-Codierung zu wechseln, die fast alle Vorteile von Base64 beibehält und die + und / entfernt. Die Base62-Codierung ist jedoch nicht so einfach anwendbar wie ein Ersatz für die binäre Übertragung und daher weitaus weniger beliebt.


Abschluss

Das ist alles! Jetzt verfügen Sie über grundlegende Kenntnisse der Basissysteme, insbesondere in Bezug auf die Codierung von Binärdaten. Welche anderen Arten von Webanwendungen würden Sie für diese Codierungen verwenden?

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Scroll to top
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.