我想在Iphone中将NSData转换为double值

时间:2011-07-15 05:35:37

标签: iphone objective-c ios types

我想要NSData的隐蔽内容实际上我需要作为双重类型    我怎么能转换它?

这里         1ff46c56 7dd86f40 nsdata字节,我想要双重

3 个答案:

答案 0 :(得分:12)

假设您的数据正好是8个字节,您可以使用memcpy(3)将其转换为double

double ConvertNSDataToDouble(NSData *data)
{
    double d;
    assert([data length] == sizeof(d));
    memcpy(&d, [data bytes], sizeof(d));
    return d;
}

请注意,这假定数据采用本机结尾格式。如果您知道数据是big-little-endian,那么您可能需要先将字节进行endian-swap。

答案 1 :(得分:6)

您也可以这样做(除了 Adam Rosenfield的答案)。 仅当数据采用UTF8编码时才会起作用。

NSString *dbleStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
double dble = [dbleStr doubleValue];

如果数据采用endian格式,请使用 NSUTF16BigEndianStringEncoding NSUTF16LittleEndianStringEncoding 中的相应编码格式之一。

注意:数据应包含double值。否则你会得到意想不到的结果。

答案 2 :(得分:1)

开销较少的解决方案

const double *double_ptr = [data bytes];

使用的例子很简单:

double val = double_ptr[0]; // the first double value in array

double val = *double_ptr;