#pragma pack(n)


typedef struct _Wave_Header
{ 
#pragma pack(1)
        char riff_id[4];                                           //"RIFF"                
        int32_t riff_datasize;                                         // RIFF chunk data size 

        char riff_type[4];                                       // "WAVE"               
        char fmt_id[4];                                          // "fmt "               
        int32_t fmt_datasize;                                        // fmt chunk data size  
        int16_t fmt_compression_code;                   // 1 for PCM            
        int16_t fmt_channels;                                   // 1 or 2               
        int32_t fmt_sample_rate;                                  // samples per second   
        int32_t fmt_avg_bytes_per_sec;                       // sample_rate*block_align
        int16_t fmt_block_align;                               // number bytes per sample bit_per_sample*channels/8
        int16_t fmt_bit_per_sample;                         // bits of each sample. 

        char data_id[4];                                         // "data"               
        int32_t data_datasize;                                       // data chunk size.     
#pragma pack()
}WaveHeader;

編譯器中提供了#pragma pack(n)來設定變量以n字節對齊方式。n字節對齊就是說變量存放的起始地址的偏移量有兩種情況:第一、如果n大於等於該變量所占用的字節數,那么偏移量必須滿足默認的對齊方式,第二、如果n小於該變量的類型所占用的字節數,那么偏移量為n的倍數,不用滿足默認的對齊方式。結構的總大小也有個約束條件,分下面兩種情況:如果n大於所有成員變量類型所占用的字節數,那么結構的總大小必須為占用空間最大的變量占用的空間數的倍數;否則必須為n的倍數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM