Pregunta

alguien ayuda

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!

¿Fue útil?

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:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top