从NSData对象中提取二进制数据

时间:2011-05-03 18:58:09

标签: objective-c

我有一个带有一大块二进制数据的NSData对象,我正在尝试使用getBytes:range:来设置原语。

我可以这样做:

NSData* data = [...get record from file...]
double value = 0;
[data getBytes:&value range:NSMakeRange(42, 8)];
[someObject setValue:value];

我宁愿不必使用临时变量,因为我需要阅读此文件中的许多字段。

是否有一种简单的方法(objc或c)从NSData对象中提取字节,将这些字节转换为某个原始值,并将其分配给对象而不使用某些临时值?

谢谢!

1 个答案:

答案 0 :(得分:6)

这不是最漂亮的,但你可以获得NSData使用的原始数据指针并在适当的位置取消引用它。

UInt8 *rawData = [theData bytes];
[someObject setValue:*((double*)(&rawData[42]))];

这涉及大量的转换,但是您只需要为每种数据类型使用一个临时变量而不是一个,并且它会稍快一些,因为您不会反复向NSData对象询问特定范围的数据。 / p>