Frage

Ich habe eine Reihe von Hex -Werten als Uint32* gespeichert

  • 2009-08-25 17: 09: 25.597 Partikel [1211: 20b] 68000000
  • 2009-08-25 17: 09: 25.598 Partikel [1211: 20b] A9000000
  • 2009-08-25 17: 09: 25.598 Partikel [1211: 20b] 99000000

Wenn ich in INT konvertiere, sind sie verrückte Werte, wenn sie von 0-255 stammen sollten, denke ich. Ich denke, ich muss nur die ersten beiden Ziffern extrahieren. Wie mache ich das? Ich habe versucht, 1000000 zu teilen, aber ich glaube nicht, dass das in Hex funktioniert.

War es hilfreich?

Lösung

Objektiv C ist im Wesentlichen C mit zusätzlichem Zeug. Ihre üblichen Bitverschiebungsvorgänge (my_int >> 24 oder was auch immer) sollten funktionieren.

Andere Tipps

Da Sie für jeden Wert <255 erwarten und nur das höchste Byte in den von Ihnen veröffentlichten Beispieldaten festgelegt ist, sieht es aus wie Ihr Endiangess ist gemischt - Sie haben eine große endianische Zahl geladen, sie dann als wenig Endian interpretiert oder umgekehrt, was dazu führte, dass die Reihenfolge der Bytes in der falschen Reihenfolge liegt.

Angenommen, wir hatten die Nummer 104 in 32 Bit auf einer großen endianischen Maschine. Im Speicher wären die Bytes: 00 00 00 68. Wenn Sie dies in Speicher auf einer kleinen endianischen Maschine geladen hätten, würden diese Bytes als 68000000 interpretiert.

Woher hast du die Zahlen? Müssen Sie sie in die Byte -Byte -Bestellung konvertieren?

Dies klingt absolut nach einem Endiangess -Problem. Unabhängig davon, ob es sich um eine einfache Bitveränderung handelt oder nicht, sollte der Job erledigen:

uint32_t saneValue = insaneValue >> 24;

Die Dividierung durch 0x1000000 sollte funktionieren (dh bis 16^6 = 2^24, nicht 10^6). Das ist das gleiche wie das Verschieben der Bits um 24 (ich kenne die OBJC -Syntax nicht, sorry).

Versuchen Sie, die Funktion zu verwenden NSSwapInt(), dh

int x = 0x12345678;
x = NSSwapInt(x);
NSLog (@"%x", x);

Sollte „78563412“ drucken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top