Datentypen
Datentypen sind sehr wichtig zum Lesen und Schreiben von Daten. Beim Schreiben definieren die Datentypen, wie die empfangenen Werte interpretiert und in der Liste angezeigt werden sollen. Für das Lesen spezifizieren sie, wie die Daten die der User eingibt interpretiert werden und an andere Geräte weitergegeben werden. Es gibt einige verschiedene Optionen.
Der geschriebene Wert wird als Text im Heximal-System dargestellt. Hex strings können sehr einfach in Byte Arrays umgewandelt werden: Jedes Paar von Buchstaben bildet genau einen Byte ab:
-> AE C8 FF
-> 174, 200, 255
Der geschriebene Wert wird als Binäre Zahl dargestellt. Acht Paare von Zahlen bilden genau ein Byte ab:
-> 10101110 11001000 11111111
-> 178, 200, 255
Signed Integer
Abschnitt betitelt „Signed Integer“Die Anwendung interpretiert Byte Arrays als ganzzahlige Werte mit Vorzeichen. Negative Zahlen werden mit dem Zweierkomplement dargestellt. Bei numerischen Datentypen können noch weitere Optionen angegeben werden, die entscheiden, wie der Wert konvertiert wird: Zunächst muss eine Endianness angegeben werden, die angibt, in welcher Reihenfolge die bytes sich befinden:
- Little Endian: Das erste Byte ist das “Least significant byte”
- Big Endian: Das erste Byte ist das “Most significant byte”
Außerdem muss eine länge für die Zahl angegeben werden. Es wird unterschieden zwischen:
- 4 Bytes: von -2.147.483.648 bis +2.147.483.647
- 8 Bytes: von -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807
Beispiel:
Das Byte Array
64 00 00 wird interpretiert als:
- Little Endian: 100
- Big Endian: 6.553.600
9C FF FF FF wird interpretiert als:
- Little Endian: -100
- Big Endian: -1.660.944.385
Unsigned Integer
Abschnitt betitelt „Unsigned Integer“Prinzipiell das gleiche wie Signed Integer, kann aber nur positive Werte annehmen. Die Zahlen können folgende Werte annehmen:
- 4 Bytes: von 0 bis 4.294.967.295
- 8 Bytes: von 0 bis 18.446.744.073.709.551.615
Beispiel:
Das Byte Array
64 00 00 wird interpretiert als:
- Little Endian: 100
- Big Endian: 6.553.600
9C FF FF FF wird interpretiert als:
- Little Endian: 4.294.967.196
- Big Endian: 2.634.022.911
Signed floating point
Abschnitt betitelt „Signed floating point“Dieser Datentyp kann negative und positive Gleitkommazahlen abbilden. Auch hier ist die Endianness und die Größe wichtig.
Es können folgende Bereiche dargestellt werden:
- 4 Bytes: von ±1.5 x 10−45 bis ±3.4 x 1038
- 8 Bytes: von 0 to ±5.0 × 10−324 bis ±1.7 × 10308
Jeder Buchstabe wird durch ein Byte im Unicode-Alphabet dargestellt.
Beispiel:
-> Hello
-> 48 65 6C 6C 6F
wobei: 48 = ‘H’, 65 = ‘e’, 6C = ‘l’ and 6F = ‘o’
BluetoothDate
Abschnitt betitelt „BluetoothDate“BluetoothDate ist ein Datentyp um Datums- und Uhrzeitangaben in Byte-Format darzustellen. Eine Nachricht ist immer 10 Byte lang, wobei sich die Informationen folgendermaßen aufgeteilt werden:
- 2 Bytes für das Jahr (Little Endian Unsigned Integer)
- 1 Byte für den Monat
- 1 Byte für den Tag
- 1 Byte für Stunden
- 1 Byte für Minuten
- 1 Byte für Sekunden
- 1 Byte für den Wochentag
- 1 Byte für Millisekunden
- 1 Byte für die Adjust reason (not used)
Beispiel:
-> 2016-01-03T04:36:20
-> E0 07 01 03 04 36 24 00 00 00 -> 224, 7, 1, 3, 4, 36, 20, 0, 0, 0
Created by Sören Christ