Frage

Kann jemand mir helfen? Ich habe einen NSString mit @"12.34" und ich möchte es in ein NSString mit der gleichen Fließkommazahl konvertieren, sondern in einfacher Genauigkeit 32bits binäre Gleitkommaformat nach IEEE-754: wie @"\x41\x45\x70\xa4" (mit Hexa-Zeichen) oder @"AEp¤" ... Ich bin sicher, es ist etwas einfach, aber nach vielen Stunden des doc lesen, ohne eine Lösung zu finden ...

Danke!

War es hilfreich?

Lösung

Wie Yuji erwähnt, es ist keine gute Idee, eine beliebige Byte-Sequenz in eine NSString zu kodieren (obwohl es Null-Bytes enthalten kann), wie Transformationen kodiert, kann (und wahrscheinlich) Ihre Bytefolge zerstören. Wenn Sie den Zugriff auf die rohen Bytes eines Schwimmers wollen, sollten Sie betrachten sie als NSData Objekt speichern (obwohl ich schlage vor, Sie denken über Ihre Gründe für den Wunsch diese zuerst). Um dies zu tun:

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

Andere Tipps

Wenn Sie die rohen Bytes eines Schwimmers erhalten möchten, können Sie es werfen könnte, etwa so:

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]);

jedoch die Reihenfolge, in der diese Bytes in dem Array gespeichert wird, hängt von der Maschine. (Siehe http://en.wikipedia.org/wiki/Endianness ). Zum Beispiel auf meinem Intel iMac druckt: "Bytes a4 70 45 41".

Um einen neuen NSString aus einem Array von Bytes machen Sie initWithBytes:length:encoding:

verwenden können,
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top