iPhone SDK: NSSTRING NSNUMBER IEEE-754
-
21-09-2019 - |
Pergunta
Alguém pode me ajudar ? eu tenho um NSString
com @"12.34"
E eu quero convertê-lo em uma NSString com o mesmo número de flutuação, mas em um único formato de ponto flutuante binário IEEE-754: como @"\x41\x45\x70\xa4"
(com caracteres hexa) ou @"AEp¤"
... Tenho certeza de que é algo fácil, mas depois de muitas horas lendo o documento sem encontrar uma solução ...
Obrigada !
Solução
Como Yuji mencionou, não é uma boa idéia codificar uma sequência de bytes arbitrários em uma NSString (embora possa conter bytes nulos), pois as transformações de codificação podem (e provavelmente) destruir sua sequência de bytes. Se você deseja acessar os bytes crus de um flutuador, considere armazená -los como um objeto NSData (embora eu sugira que você pense nas suas razões para querer isso primeiro). Para fazer isso:
NSString *string = @"10.23";
float myFloat = [string floatValue];
NSData *myData = [[NSData alloc] initWithBytes:&myFloat length:sizeof(myFloat)];
Outras dicas
Se você quiser obter os bytes crus de um flutuador, você pode lançá -lo, assim:
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]);
No entanto, a ordem em que esses bytes são armazenados na matriz depende da máquina. (Ver http://en.wikipedia.org/wiki/endianness). Por exemplo, no meu Intel iMac, ele imprime: "Bytes: A4 70 45 41".
Para fazer um novo NSString a partir de uma variedade de bytes, você pode usar initWithBytes:length:encoding: