#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的倍数。

原文地址:https://www.cnblogs.com/douzujun/p/10642826.html