iPhone SDK :NSString Номер NSNumber IEEE-754
-
21-09-2019 - |
Вопрос
Кто - нибудь может мне помочь ?У меня есть 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: