Lektion 9: Einsen und Nullen
Bisher haben wir Text verwendet, wenn wir Daten speichern oder übertragen. Während dies die Interpretation erleichtert, ist es auch ineffizient. Computer verwenden intern binäre Daten, bei denen die Daten als Mengen von Einsen und Nullen gespeichert werden. In dieser Lektion werden wir uns Möglichkeiten ansehen, binäre Daten mit CanSat NeXT zu verwenden, und diskutieren, wo und warum es nützlich sein kann, dies zu tun.
Verschiedene Datentypen
In binärer Form werden alle Daten – ob Zahlen, Text oder Sensorwerte – als eine Reihe von Einsen und Nullen dargestellt. Verschiedene Datentypen verwenden unterschiedliche Mengen an Speicher und interpretieren die binären Werte auf spezifische Weise. Lassen Sie uns kurz einige gängige Datentypen und deren Speicherung in binärer Form überprüfen:
-
Integer (int):
Ganzzahlen repräsentieren ganze Zahlen. In einem 16-Bit-Integer können beispielsweise 16 Einsen und Nullen Werte von (-32.768) bis (32.767) darstellen. Negative Zahlen werden mit einer Methode namens Zweierkomplement gespeichert. -
Unsigned Integer (uint):
Unsigned Integers repräsentieren nicht-negative Zahlen. Ein 16-Bit-Unsigned Integer kann Werte von (0) bis (65.535) speichern, da keine Bits für das Vorzeichen reserviert sind. -
Float:
Gleitkommazahlen repräsentieren Dezimalwerte. In einem 32-Bit-Float repräsentiert ein Teil der Bits das Vorzeichen, den Exponenten und die Mantisse, wodurch Computer sehr große und sehr kleine Zahlen verarbeiten können. Es ist im Wesentlichen eine binäre Form der wissenschaftlichen Notation. -
Zeichen (char):
Zeichen werden mit Kodierungsschemata wie ASCII oder UTF-8 gespeichert. Jedes Zeichen entspricht einem bestimmten binären Wert (z. B. wird 'A' in ASCII als01000001
gespeichert). -
Strings:
Strings sind einfach Sammlungen von Zeichen. Jedes Zeichen in einem String wird in Sequenz als individuelle binäre Werte gespeichert. Zum Beispiel würde der String"CanSat"
als eine Reihe von Zeichen wie01000011 01100001 01101110 01010011 01100001 01110100
gespeichert (jeweils repräsentierend 'C', 'a', 'n', 'S', 'a', 't'). Wie Sie sehen können, ist das Darstellen von Zahlen als Strings, wie wir es bisher getan haben, weniger effizient im Vergleich zur Speicherung als binäre Werte. -
Arrays und
uint8_t
:
Beim Arbeiten mit binären Daten ist es üblich, ein Array vonuint8_t
zu verwenden, um rohe Byte-Daten zu speichern und zu verarbeiten. Der Typuint8_t
repräsentiert einen unsignierten 8-Bit-Integer, der Werte von 0 bis 255 halten kann. Da jedes Byte aus 8 Bits besteht, ist dieser Typ gut geeignet, um binäre Daten zu halten. Arrays vonuint8_t
werden oft verwendet, um Byte-Puffer zu erstellen, die Sequenzen von rohen binären Daten (z. B. Pakete) halten. Einige Leute bevorzugenchar
oder andere Variablen, aber es spielt keine Rolle, welche verwendet wird, solange die Variable eine Länge von 1 Byte hat.