2012-01-19 77 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