2012-01-19 45 views
0

我需要转换一个格式化的数据结构是这样简便的方法转换格式化数据结构

[data getBytes:&h.a range:(NSRange){0,4}]; 
[data getBytes:&h.b range:(NSRange){4,4}]; 
[data getBytes:&h.c range:(NSRange){8,2}]; 

有没有更好的将数据转换为结构的方法?

回答

2
[data getBytes:&h range:(NSRange){0, sizeof(struct header)}]; 
+1

虽然您可能会遇到与对齐有关的问题,例如,在编译器或处理器的版本之间。这可能值得看看'#pragma pack'; LLVM应该与MSVC完全兼容,如果这有助于谷歌搜索。 – Tommy

+0

@Tommy你能告诉我在哪种情况下(或编译器)麻烦会发生。我用llvm进行了测试,看起来很有效。 – xhan

+0

@xhan:编译器通常会在结构项之间插入填充字节,以便各个项与字边界对齐或确保总体结构大小为平台字大小的整数倍或其他原因。 '#pragma pack'给你一些控制权。例如。如果我把你的结构并在'char c'后面添加'int d',然后打印sizeof,然后通过LLVM编译为iPad 5.0模拟器,我得到16,d相对于开始的12字节的偏移量结构。如果包装很紧,它会在9点。 – Tommy

相关问题