在网络协议编程中,经常会处理不同协议的数据报文。一种方法是通过指针偏移的方法来得到各种信息,但这样做不仅编程复杂,而且一旦协议有变化,程序修改起来也比较麻烦。在了解了编译器对结构空间的分配原则之后,我们完全可以利用这一特性定义自己的协议结构,通过访问结构的成员来获取各种信息。这样做,不仅简化了编程,而且即使协议发生变化,我们也只需修改协议结构的定义即可,其它程序无需修改,省时省力。
#pragma pack (1) //设定为1字节对齐 作用:调整结构体的边界对齐,让其以一个字节对齐;<使结构体按1字节方式对齐>
#pragma pack(push) //保存当前对齐状态
#pragma pack(4) //设定为4字节对齐
#pragma pack () //按结构数据内最大的字节对齐
#pragma pack(push,1)//把原来对齐方式压栈,并设置新的对齐方式为1个字节对齐
#pragma pack(pop) //恢复默认对齐方式
由上可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大。
例子: