最初我认为下面提供的代码是有效的,"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);
Run Code Online (Sandbox Code Playgroud)
好的,让我扩展这个小(上面的代码更新),这是我得到的:
inBuffer = <3d2aaaab>
MDD_times = -1.209095e-12 (this will be 0.0416667 bigEndian)
NSLog(@"Time: %f", MDD_times) = Time: -0.000000
Run Code Online (Sandbox Code Playgroud)
它可能是不能容纳浮点值的NSLog,我将浮点数中的字节翻转到bigEndian,预期值"0.0416667"显示就好了.至少我知道NSData> float位正在按预期工作.
加里
这里有一些代码我必须在缓冲区中的给定偏移处执行此操作.当文件采用大端格式时,无论主机端是什么,这都应该有效.
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2667 次 |
| 最近记录: |