iPhone SDK: NSString NSNumber IEEE-754
-
21-09-2019 - |
Pregunta
Can mí? Tengo un NSString
con @"12.34"
y quiero convertirlo en un NSString con el mismo número flotante de 32 bits, pero en precisión simple binario formato de punto flotante IEEE-754: igual que @"\x41\x45\x70\xa4"
(con caracteres hexa) o @"AEp¤"
...
Estoy seguro de que es algo fácil, pero después de muchas horas de lectura del documento, sin encontrar una solución ...
Gracias!
Solución
Como se mencionó Yuji, que no es una buena idea para codificar una secuencia de bytes arbitraria en un NSString (aunque puede contener nulos bytes), como la codificación transformaciones puede (y probablemente lo hará) destruir su secuencia de bytes. Si desea acceder a los bytes sin formato de un flotador, es posible que desee considerar la posibilidad de almacenarlos como un objeto NSData (aunque le sugiero que pensar a través de sus razones para querer esta primera). Para hacer esto:
NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];
Otros consejos
Si desea obtener los bytes sin formato de un flotador, que podría echarlo, así:
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]);
Sin embargo, el orden en que estos bytes se almacenan en la matriz depende de la máquina. (Ver http://en.wikipedia.org/wiki/Endianness ). Por ejemplo, en mi iMac Intel se imprime: "Bytes: a4 70 45 41".
Para hacer una nueva NSString de una matriz de bytes que puede utilizar initWithBytes:length:encoding: