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

NIK*_*HIL 15 iphone types objective-c ios

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

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

Ada*_*eld 12

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

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

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


Emp*_*ack 6

你也可以这样做(除了亚当罗森菲尔德的回答).这仅在数据采用UTF8编码时才有效.

NSString *dbleStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
double dble = [dbleStr doubleValue];
Run Code Online (Sandbox Code Playgroud)

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

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