Question

J'ai un tas de valeurs hexadécimales stockées comme uint32 *

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

Lorsque je me convertisse en INT tel quel, ce sont des valeurs folles quand elles devraient être de 0 à 255, je pense. Je pense que j'ai juste besoin d'extraire les deux premiers chiffres. Comment puis-je faire cela? J'ai essayé de diviser par 1000000 mais je ne pense pas que cela fonctionne en Hex.

Était-ce utile?

La solution

L'objectif C est essentiellement C avec des trucs supplémentaires sur le dessus. Vos opérations habituelles de shift bit (my_int >> 24 ou autre) devraient fonctionner.

Autres conseils

Étant donné que vous attendez <255 pour chaque valeur et que seul l'octet le plus élevé est défini dans les exemples de données que vous avez publiées, il ressemble à votre endication est mélangé - vous avez chargé un grand nombre endian, puis l'interprété comme peu endian, ou vice versa, provoquant l'ordre des octets dans le mauvais ordre.

Par exemple, supposons que le nombre 104 soit stocké en 32 bits sur une grande machine endian. En mémoire, les octets seraient: 00 00 00 68. Si vous le chargéz en mémoire sur une petite machine endian, ces octets seraient interprétés comme 68000000.

D'où avez-vous obtenu les chiffres? Avez-vous besoin de les convertir en commande d'octets de la machine?

Cela ressemble absolument à un problème d'endianness. Que ce soit ou non, un changement simple devrait faire le travail:

uint32_t saneValue = insaneValue >> 24;

La division par 0x1000000 devrait fonctionner (c'est-à-dire par 16 ^ 6 = 2 ^ 24, pas 10 ^ 6). C'est la même chose que de déplacer les bits à droite de 24 (je ne connais pas la syntaxe OBJC, désolé).

Essayez d'utiliser la fonction NSSwapInt(), c'est à dire

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

Devrait imprimer «78563412».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top