Я хочу преобразовать NSData Чтобы удвоить значение в Iphone
Я хочу скрытое содержимое NSData. На самом деле, мне нужно, как двойной тип как я могу его преобразовать?
здесь 1ff46c56 7dd86f40 nsdata byte, и я хочу в двойном
Ответы
Ответ 1
Предполагая, что ваши данные равны 8 байтам, вы можете преобразовать их в double
с помощью memcpy(3)
:
double ConvertNSDataToDouble(NSData *data)
{
double d;
assert([data length] == sizeof(d));
memcpy(&d, [data bytes], sizeof(d));
return d;
}
Обратите внимание, что это предполагает, что данные находятся в исходном формате. Если вы знаете, что данные являются большими или маленькими, тогда вам может потребоваться сначала поменять байты.
Ответ 2
Вы также можете сделать это так (кроме ответа Адама Розенфилда).
Это будет работать только в том случае, если данные кодируются UTF8.
NSString *dbleStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
double dble = [dbleStr doubleValue];
Если данные в формате endian используют один из соответствующих форматов кодировки из NSUTF16BigEndianStringEncoding, NSUTF16LittleEndianStringEncoding.
Примечание. Данные должны содержать двойное значение. В противном случае вы получите неожиданные результаты.
Ответ 3
Решение с меньшими затратами
const double *double_ptr = [data bytes];
Примеры использования просто:
double val = double_ptr[0]; // the first double value in array
или
double val = *double_ptr;