Für Swift 3 können Sie dies tun (Little Endian, aber ähnlich für große):
%Vor%Sie können dies ändern, Generika usw. hinzufügen, um andere primitive Typen zu verwenden (und diese abhängig von der Endianität der Datenbytes variieren).
Beim Extrahieren eines ganzzahligen Werts aus einem Data
-Stream sind einige Dinge zu beachten. Signigness und Endianess . Also habe ich eine Funktion in einer Erweiterung von Data
gefunden, die Signedness von dem Typ der zu extrahierenden Ganzzahl ableitet und Endianess und Index
als Parameter übergibt. Die Arten von Ganzzahlen, die extrahiert werden können, sind alle konform mit FixedWidthInteger
protocol.
Zur Erinnerung: Diese Funktion prüft nicht, ob der Index
-Bereich innerhalb der Grenzen des Data
-Puffers liegt, so dass er abhängig von der Größe des Typs, der in Relation zum Ende des Puffers.
Beispiel:
%Vor%Ergebnisse:
number1 is 8191
number2 is 65311
number3 is -225
number4 is 8191
Beobachten Sie die Funktionsaufrufe, um zu sehen, wie der zu extrahierende Typ abgeleitet wird. Natürlich macht Endianess für Int8
oder UInt8
keinen Sinn, aber die Funktion funktioniert wie erwartet.
Werte können später bei Bedarf in Int
umgewandelt werden.
Sie können diese Methode nützlich finden, wenn Sie viel tun:
%Vor%Die Funktion verwendet als Parameter die Startposition in den Daten, um den numerischen Typ zu lesen, und gibt einen Wert des a-Typs zurück, der von dem abgeleitet wurde, dem Sie ihn zuweisen.
Zum Beispiel:
%Vor%liest eine 4-Byte-Ganzzahl von Position 10 in den Daten.
Wenn Sie UInt32
in UInt16
ändern, liest es zwei Bytes.
Mein Beitrag mit einer schnellen 3.1 Erweiterung:
%Vor%Rufen Sie einfach .int auf, um Ihren Wert zu erhalten, einfach so:
%Vor%