一、自动对齐pragma pack#pragma pack是 C/C 中用于控制结构体内存对齐方式的预处理指令1. 默认对齐没有#pragma pack编译器会按照成员变量的最大对齐要求来对齐结构体struct Example { char c; // 1字节 int i; // 4字节 double d; // 8字节 }; // 默认情况下sizeof(Example) 16 字节 // 因为 int 需要4字节对齐double 需要8字节对齐2.#pragma pack(1)- 1字节对齐强制所有成员按1字节对齐消除所有填充字节#pragma pack(push, 1) struct Example { char c; int i; double d; }; #pragma pack(pop) // sizeof(Example) 1 4 8 13 字节3. 其他对齐值#pragma pack(push, 2) // 2字节对齐#pragma pack(push, 4) // 4字节对齐Windows默认#pragma pack(push, 8) // 8字节对齐Linux默认#pragma pack(push, 16) // 16字节对齐4.#pragma pack的语法// 方式1简单的开启/关闭#pragma pack(1) // 开启1字节对齐struct MyStruct { ... };#pragma pack() // 恢复默认对齐// 方式2使用 push/pop推荐#pragma pack(push, 1) // 保存当前对齐设置设为1字节对齐struct MyStruct { ... };#pragma pack(pop) // 恢复之前保存的对齐设置// 方式3临时改变#pragma pack(push) // 保存当前设置#pragma pack(1) // 改为1字节对齐struct MyStruct { ... };#pragma pack(pop) // 恢复设置二、关于大小端发送端和接收端都是 Windows x64都是小端小端Little-Endian低地址存低位字节Intel x86/x64int value 0x12345678; // 4字节 内存地址: 0x00 0x01 0x02 0x03 存储内容: 0x78 0x56 0x34 0x12 ^低地址 ^高地址 ^低位字节 ^高位字节大端Big-Endian低地址存高位字节网络字节序int value 0x12345678; 内存地址: 0x00 0x01 0x02 0x03 存储内容: 0x12 0x34 0x56 0x78 ^低地址 ^高地址 ^高位字节 ^低位字节