Objective c 将NSData转换为浮点?

Objective c 将NSData转换为浮点?,objective-c,Objective C,起初我认为下面的代码是有效的,“inBuffer”似乎正确地获得了4字节的数据,变量MDD_times也是正确的 NSData *inBuffer; float MDD_times; // FLOAT_002 inBuffer = [inFile readDataOfLength:sizeof(float)]; [inBuffer getBytes: &MDD_times length:sizeof(float)]; NSLog(@"Time: %f", MDD_times); 好的

起初我认为下面的代码是有效的,“inBuffer”似乎正确地获得了4字节的数据,变量MDD_times也是正确的

NSData *inBuffer;
float MDD_times;

// FLOAT_002
inBuffer = [inFile readDataOfLength:sizeof(float)];
[inBuffer getBytes: &MDD_times length:sizeof(float)];
NSLog(@"Time: %f", MDD_times);
好的,让我详细介绍一下(上面更新的代码),这就是我得到的:

inBuffer = <3d2aaaab>
MDD_times = -1.209095e-12 (this will be 0.0416667 bigEndian)
NSLog(@"Time: %f", MDD_times) = Time: -0.000000
inBuffer=
MDD_times=-1.209095e-12(这将是0.0416667 bigEndian)
NSLog(@“时间:%f”,MDD_时间)=时间:-0.000000
可能是NSLog无法容纳浮点值,我将浮点中的字节翻转为bigEndian,预期值“0.0416667”显示得很好。至少我知道NSData>浮点位正在按预期工作


gary

如果您确定
infle
返回使用相同类型的浮点和相同的尾数编码的数据,那么您的代码应该可以按预期工作。

以下是一些代码,我必须在缓冲区中的给定偏移量下执行此操作。当文件为big-endian格式时,无论主机端是什么,这都应该有效

union intToFloat
{
    uint32_t i;
    float fp;
};

+(float)floatAtOffset:(NSUInteger)offset
               inData:(NSData*)data
{
    assert([data length] >= offset + sizeof(float));
    union intToFloat convert;

    const uint32_t* bytes = [data bytes] + offset;
    convert.i = CFSwapInt32BigToHost(*bytes);

    const float value = convert.fp;

    return value;
}