青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

從wave文件的讀寫看程序中struct的設(shè)計(jì)


在windows中,對(duì)于wave音頻格式,有如下的一系列結(jié)構(gòu):
typedef struct waveformat_tag 
{
    WORD    wFormatTag;        
/**//* format type */
    WORD    nChannels;         
/**//* number of channels (i.e. mono, stereo, etc.) */
    DWORD   nSamplesPerSec;    
/**//* sample rate */
    DWORD   nAvgBytesPerSec;   
/**//* for buffer estimation */
    WORD    nBlockAlign;       
/**//* block size of data */
}
 WAVEFORMAT;

typedef 
struct pcmwaveformat_tag 
{
    WAVEFORMAT  wf;
    WORD        wBitsPerSample;
}
 PCMWAVEFORMAT;

struct TWavHeader
{
    
char rId[4];                //標(biāo)志符(RIFF)
    DWORD rLen;         //數(shù)據(jù)大小,包括數(shù)據(jù)頭的大小和音頻文件的大小
    char wId[4];              //格式類型("WAVE")
    char fId[4];                //"fmt"
    DWORD fLen;         //Sizeof(PCMWAVEFORMAT)
    PCMWAVEFORMAT wavFormat;
    
char dId[4];              //"data"
    DWORD wSampleLength;    //音頻數(shù)據(jù)的大小
}
;

采用這樣的結(jié)構(gòu)寫的音頻文件,文件頭會(huì)有如下的結(jié)果:

不難發(fā)現(xiàn),第0020行明顯多出幾個(gè)字節(jié)。這樣造成聲音文件無(wú)法播放出來(lái)。

從結(jié)構(gòu)定義角度來(lái)看,也不難發(fā)現(xiàn)PCMWAVEFORMAT結(jié)構(gòu)中,WAVEFORMAT結(jié)構(gòu)前四個(gè)成員已經(jīng)4字節(jié)對(duì)齊了,最后一個(gè)成員nBlockAlign只占用兩字節(jié),按照字節(jié)對(duì)齊規(guī)則,需要在填充兩個(gè)無(wú)效字節(jié),從而保證到4字節(jié)對(duì)齊;PCMWAVEFORMAT結(jié)構(gòu)還是采用4字節(jié)對(duì)齊,因此只占用兩字節(jié)的
最后一個(gè)成員wBitsPerSample還需要兩字節(jié)補(bǔ)齊,因此才有了上圖的字節(jié)分布。

解決方法就是采用緊縮結(jié)構(gòu),不允許字節(jié)對(duì)齊。

從這個(gè)親身經(jīng)歷來(lái)看,字節(jié)非對(duì)齊的結(jié)構(gòu)也是一種潛在的bug,程序中設(shè)計(jì)的各種結(jié)構(gòu)盡量保持字節(jié)對(duì)齊是一種好的習(xí)慣。

posted on 2008-06-16 11:00 Wealth 閱讀(1972) 評(píng)論(4)  編輯 收藏 引用 所屬分類: C++

評(píng)論

# re: 從wave文件的讀寫看程序中struct的設(shè)計(jì) 2008-06-16 11:21 Kevin Lynx

有道理,對(duì)于用struct寫文件這種情況,很容易因?yàn)閟truct的字節(jié)對(duì)齊問題導(dǎo)致想不到的BUG。尤其是采用直接將struct以二進(jìn)制方式寫入文件的方式寫文件。
  回復(fù)  更多評(píng)論   

# re: 從wave文件的讀寫看程序中struct的設(shè)計(jì) 2008-06-17 19:56 Wealth

@Kevin Lynx

對(duì)呀,這些bug一般還很難找。  回復(fù)  更多評(píng)論   

# re: 從wave文件的讀寫看程序中struct的設(shè)計(jì) 2008-06-23 01:10 R2仔

用 #pragma pack(2) 來(lái)改變字節(jié)對(duì)齊設(shè)置也可以吧  回復(fù)  更多評(píng)論   

# re: 從wave文件的讀寫看程序中struct的設(shè)計(jì) 2008-06-24 14:55 Wealth

@R2仔
在這個(gè)應(yīng)用中是可以的。
但我們?cè)谶@里討論的不是幾個(gè)字節(jié)對(duì)齊的問題,而是如何避免由于潛在的機(jī)制而導(dǎo)致的bug  回復(fù)  更多評(píng)論   

<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類(8)

隨筆檔案(8)

文章分類

Around Web

CoBlog

Develop Usage Link

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品日韩| 免费在线观看成人av| 免费h精品视频在线播放| 久久国产精品网站| 亚洲欧美www| 性色一区二区三区| 久久精品成人一区二区三区蜜臀| 一本色道久久综合亚洲精品小说| 亚洲电影天堂av| 亚洲精品中文在线| 亚洲免费视频在线观看| 亚洲成人在线免费| 亚洲高清视频一区| 亚洲深夜福利网站| 在线播放亚洲一区| 亚洲国产欧美不卡在线观看| 亚洲国产婷婷| 亚洲欧美精品一区| 蜜臀久久99精品久久久画质超高清| 欧美大尺度在线观看| 一区二区三区 在线观看视| 欧美在线不卡视频| 国产精品视频一二三| 有码中文亚洲精品| 亚洲欧美精品伊人久久| 欧美高清日韩| 久久久综合激的五月天| 欧美日韩在线播| 亚洲国产综合在线看不卡| 亚洲午夜一级| 亚洲国产精品精华液2区45| 亚洲欧美另类在线观看| 欧美日本韩国| 亚洲日本成人| 91久久精品一区二区三区| 亚洲欧美日韩精品久久久久| 欧美日韩一区二区三区免费| 国语自产在线不卡| 亚洲永久在线| 欧美承认网站| 欧美国产视频在线| 亚洲一区欧美二区| 在线亚洲一区观看| 国产欧美精品日韩精品| 国产精品国产三级国产普通话三级 | 久久另类ts人妖一区二区| 亚洲欧美视频| 伊人成人在线| 日韩视频中午一区| 国产精品一区二区三区久久久| 亚洲一级黄色av| 午夜在线视频观看日韩17c| 国产老女人精品毛片久久| 亚洲一区二区三区激情| 一区二区av| 激情国产一区| 91久久中文字幕| 国产精品久久7| 蜜臀av性久久久久蜜臀aⅴ四虎| 蜜桃av一区二区三区| 亚洲视频999| 久久精品麻豆| 亚洲午夜国产成人av电影男同| 久久久国产精品一区二区三区| 一本色道久久精品| 极品尤物一区二区三区| 99在线热播精品免费| 在线免费精品视频| 欧美亚洲一区| 欧美资源在线| 国产精品国产三级国产普通话99| 久久av在线| 国产精品一区二区a| 亚洲每日在线| 亚洲一卡久久| 国产精品vip| 亚洲中字黄色| 99国产精品视频免费观看一公开| 久久精品视频va| 欧美精品成人91久久久久久久| 久久久噜噜噜久久久| 国产一区二区在线观看免费播放| 一区二区三欧美| 亚洲视屏一区| 欧美性大战久久久久久久蜜臀| 91久久夜色精品国产九色| 亚洲黄色免费电影| 欧美精品久久久久久久免费观看 | 亚洲国产精品久久久久久女王| 国产精品激情| 久久国产精品黑丝| 亚洲高清自拍| 亚洲中无吗在线| 国产有码一区二区| 欧美另类高清视频在线| 在线视频中文亚洲| 久久久777| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美激情性爽国产精品17p| 日韩亚洲欧美在线观看| 国产精品青草久久| 久久综合五月| 久久av资源网站| 亚洲午夜小视频| 亚洲国产精品999| 欧美国产综合| 悠悠资源网亚洲青| 亚洲精品裸体| 欧美电影在线播放| 久久久www| 久久激情视频久久| 性欧美1819性猛交| 亚洲图片在区色| 一本久久综合亚洲鲁鲁| 亚洲狠狠婷婷| 亚洲国产婷婷| 最近中文字幕日韩精品| 在线观看视频一区| 亚洲日本视频| 亚洲无玛一区| 亚洲欧美日韩天堂| 亚洲欧美激情一区二区| 先锋影音网一区二区| 亚洲在线观看免费| 欧美一级午夜免费电影| 久久精品盗摄| 欧美国产在线视频| 日韩视频免费观看| 在线亚洲电影| 久久久久久电影| 欧美大片免费观看| 国产精品视频xxxx| 亚洲黄色免费| 久久精品视频一| 亚洲激情视频在线观看| 亚洲一区免费看| 夜夜嗨av色综合久久久综合网| 久久久久国产免费免费| 欧美全黄视频| 在线观看视频亚洲| 亚洲在线1234| 亚洲精品中文字幕女同| 久久精品人人做人人综合| 欧美日韩午夜| 99视频在线精品国自产拍免费观看| 香蕉久久国产| 亚洲视频一区在线| 久久久久久日产精品| 亚洲精品在线观| 欧美精品久久久久久久久老牛影院| 国产性做久久久久久| 亚久久调教视频| 亚洲欧美激情四射在线日 | 中文成人激情娱乐网| 久久久蜜桃一区二区人| 狠狠色丁香婷婷综合久久片| 夜夜嗨网站十八久久| 亚洲国产美女| 欧美国产高清| 日韩亚洲一区在线播放| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲欧洲日韩在线| 久久这里只有精品视频首页| 亚洲午夜免费视频| 国产喷白浆一区二区三区| 欧美在线高清| 六月婷婷一区| 亚洲一区二区三区精品在线| 99精品国产在热久久下载| 国产精品剧情在线亚洲| 欧美在线一二三区| 久久久精品国产免费观看同学 | 亚洲欧美美女| 亚洲欧洲三级电影| 亚洲在线观看| 亚洲伦伦在线| 久久久久久免费| 欧美成人一区二区三区片免费| 亚洲国产福利在线| 99精品欧美一区二区三区综合在线 | 亚洲一区二区在线免费观看| 国产一区二区三区四区hd| 久久网站免费| 国产欧美日韩中文字幕在线| 欧美激情精品久久久久久免费印度 | 亚洲福利国产| 亚洲综合欧美| av成人免费观看| 欧美第十八页| 亚洲国产一成人久久精品| 国产午夜亚洲精品不卡| 亚洲激情社区| 中国av一区| 国产精品视频久久一区| 亚洲国产精品v| 亚洲精品乱码久久久久| 欧美一区二区三区婷婷月色| 亚洲欧美日韩国产综合在线| 欧美日韩一级片在线观看| 亚洲狼人精品一区二区三区|