Вопрос

Кто - нибудь может мне помочь ?У меня есть NSString с @"12.34" и я хочу преобразовать его в NSString с тем же числом с плавающей запятой, но в двоичном формате с плавающей запятой одинарной точности 32 бита IEEE-754 :Нравится @"\x41\x45\x70\xa4" (с шестнадцатеричными символами) или @"AEp¤"...Я уверен, что это что-то простое, но после многих часов чтения документа так и не найдя решения...

Спасибо!

Это было полезно?

Решение

Как упоминал Юджи, не стоит кодировать произвольную последовательность байтов в NSString (хотя она может содержать нулевые байты), поскольку преобразования кодирования могут (и, вероятно, уничтожат) вашу последовательность байтов.Если вам нужен доступ к необработанным байтам с плавающей точкой, вы можете рассмотреть возможность сохранения их как объекта NSData (хотя я предлагаю вам сначала обдумать причины, по которым вы этого хотите).Чтобы сделать это:

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

Другие советы

Если вы хотите получить необработанные байты значения float, вы могли бы привести его следующим образом:

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

Однако порядок, в котором эти байты хранятся в массиве, зависит от компьютера.(См. http://en.wikipedia.org/wiki/Endianness).Например, на моем Intel iMac он печатает:"Байты:формат а4 70 45 41".

Чтобы создать новую NSString из массива байтов, вы можете использовать initWithBytes:length:encoding:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top