我想要NSData的隐蔽内容实际上我需要作为双重类型 我怎么能转换它?
这里 1ff46c56 7dd86f40 nsdata字节,我想要双重
答案 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;