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!

È stato utile?

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:

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