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的倍數。