從wave文件的讀寫看程序中struct的設計
在windows中,對于wave音頻格式,有如下的一系列結構:





































采用這樣的結構寫的音頻文件,文件頭會有如下的結果:

不難發現,第0020行明顯多出幾個字節。這樣造成聲音文件無法播放出來。
從結構定義角度來看,也不難發現PCMWAVEFORMAT結構中,WAVEFORMAT結構前四個成員已經4字節對齊了,最后一個成員nBlockAlign只占用兩字節,按照字節對齊規則,需要在填充兩個無效字節,從而保證到4字節對齊;PCMWAVEFORMAT結構還是采用4字節對齊,因此只占用兩字節的
最后一個成員wBitsPerSample還需要兩字節補齊,因此才有了上圖的字節分布。
解決方法就是采用緊縮結構,不允許字節對齊。
從這個親身經歷來看,字節非對齊的結構也是一種潛在的bug,程序中設計的各種結構盡量保持字節對齊是一種好的習慣。
posted on 2008-06-16 11:00 Wealth 閱讀(1964) 評論(4) 編輯 收藏 引用 所屬分類: C++