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 !

Foi útil?

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:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top