Domanda

Ho un sacco di valori esadecimali memorizzato come UInt32 *

  • 2009-08-25 17: 09: 25,597 particelle [1211: 20b] 68000000
  • 2009-08-25 17: 09: 25,598 particelle [1211: 20b] A9000000
  • 2009-08-25 17: 09: 25,598 particelle [1211: 20b] 99.000.000

Quando converto a int come è, sono valori folli quando dovrebbero essere 0-255, credo. Credo di aver solo bisogno di estrarre le prime due cifre. Come faccio a fare questo? Ho provato dividendo per milione, ma non credo che funziona in esadecimale.

È stato utile?

Soluzione

Objective C è essenzialmente C con roba extra in cima. Le vostre consuete operazioni bit-shift (my_int >> 24 o altro) dovrebbero funzionare.

Altri suggerimenti

Dal momento che sei in attesa <255 per ogni valore e solo il più alto byte è impostato nei dati di esempio che hai postato, sembra che il tuo endianness si mescola -. caricato un numero grande endian quindi interpretato come little endian, o viceversa, provocando l'ordine dei byte per essere in ordine errato

Ad esempio, supponiamo di avere il numero 104 memorizzato in 32 bit su una grande macchina endian. In memoria, il byte sarebbe:. 00 00 00 68. Se è stato caricato questo in memoria su una macchina little endian, quei byte verrebbero interpretate come 68000000

Dove hai preso i numeri da? Avete bisogno di convertirli in ordine di byte macchina?

Questo suona assolutamente come un problema endianness. Sia o non sia, semplice spostamento bit dovrebbe fare il lavoro:

uint32_t saneValue = insaneValue >> 24;

Dividendo per 0x1000000 dovrebbe funzionare (cioè, da 16 ^ 6 = 2 ^ 24, non 10 ^ 6). Questo è lo stesso che lo spostamento dei bit a destra da 24 (non so la sintassi objC, sorry).

Provare a utilizzare la funzione NSSwapInt(), cioè.

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

deve stampare “78563412”.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top