iPhone SDK: NSString NSNumber IEEE-754
-
21-09-2019 - |
Domanda
Qualcuno mi può aiutare? Ho un NSString
con @"12.34"
e voglio convertirlo in un NSString con lo stesso numero del galleggiante ma in singoli 32bit di precisione formato binario a virgola mobile IEEE-754: come @"\x41\x45\x70\xa4"
(con i caratteri hexa) o @"AEp¤"
...
Sono sicuro che è una cosa facile, ma dopo molte ore di lettura del documento, senza trovare una soluzione ...
Grazie!
Soluzione
Come detto Yuji, non è una buona idea per codificare una sequenza di byte arbitraria in un NSString (anche se può contenere byte nulli), come trasformazioni di codifica può (e probabilmente sarà) distruggere la vostra sequenza di byte. Se si desidera accedere ai byte grezzi di un galleggiante, si può prendere in considerazione la loro memorizzazione come un oggetto NSData (anche se io suggerisco di pensare attraverso le vostre ragioni per volere questa prima). Per fare questo:
NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];
Altri suggerimenti
Se si desidera ottenere i byte grezzi di un galleggiante, potresti lanciare esso, in questo modo:
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]);
Tuttavia l'ordine in cui questi byte sono memorizzati nella matrice dipende dalla macchina. (Vedere http://en.wikipedia.org/wiki/Endianness ). Ad esempio, sul mio iMac Intel esso stampa: "Byte: A4 70 45 41".
Per creare una nuova NSString da un array di byte che è possibile utilizzare initWithBytes:length:encoding: