我有一个带有一大块二进制数据的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对象中提取字节,将这些字节转换为某个原始值,并将其分配给对象而不使用某些临时值?
谢谢!
答案 0 :(得分:6)
这不是最漂亮的,但你可以获得NSData使用的原始数据指针并在适当的位置取消引用它。
UInt8 *rawData = [theData bytes];
[someObject setValue:*((double*)(&rawData[42]))];
这涉及大量的转换,但是您只需要为每种数据类型使用一个临时变量而不是一个,并且它会稍快一些,因为您不会反复向NSData对象询问特定范围的数据。 / p>