Question

Quelqu'un peut-il me aider? J'ai un NSString avec @"12.34" et je veux le convertir en un NSString avec le même nombre flottant mais 32bits simple précision binaire format en virgule flottante IEEE-754: comme @"\x41\x45\x70\xa4" (avec des caractères hexadécimaux) ou @"AEp¤" ... Je suis sûr que c'est quelque chose facile, mais après de nombreuses heures de lecture de la doc sans trouver une solution ...

Merci!

Était-ce utile?

La solution

Comme mentionné Yuji, ce n'est pas une bonne idée de coder pour une séquence d'octets arbitraire dans une NSString (même si elle peut contenir des octets nuls), comme des transformations d'encodage (et sera probablement) détruire votre séquence d'octets. Si vous souhaitez accéder aux octets bruts d'un flotteur, vous pouvez envisager de les stocker comme un objet NSData (bien que je vous suggère de réfléchir à vos raisons de vouloir cette première). Pour ce faire:

NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];

Autres conseils

Si vous voulez obtenir les octets bruts d'un flotteur, vous pouvez le lancer, comme ceci:

NSString *str = @"12.34";
float flt = [str floatValue];
unsigned char *bytes = (unsigned char *)&flt;
printf("Bytes: %x %x %x %x\n", bytes[0], bytes[1], bytes[2], bytes[3]);

Cependant, l'ordre dans lequel ces octets sont stockés dans le tableau dépend de la machine. (Voir http://en.wikipedia.org/wiki/Endianness ). Par exemple, sur mon iMac Intel imprime: "Octets a4 70 45 41".

Pour une nouvelle NSString à partir d'un tableau d'octets que vous pouvez utiliser initWithBytes:length:encoding:

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