Я хочу преобразовать 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;