消除字节对齐
来源:互联网 发布:php用iis和apache 编辑:程序博客网 时间:2024/05/25 13:32
有时候我们要根据平台的协议,通过终端把一个结构体上报上去,但是由于编译器字节对齐的原因,有些结构体看起来并不是简单地类型字节的累加。如下
typedef struct{ INT32 Longitude;INT32 Latitude;UINT16 Speed;UINT16 Height;UINT16 ForDirect;UINT8 GPS_Year;UINT8 GPS_Month;UINT8 GPS_Day;UINT8 GPS_Hour;UINT8 GPS_Minute;UINT8 GPS_Second;UINT8 GPS_State;UINT32 WorkingTime;UINT8 GSM_State;UINT8 BAT_Voltage;UINT16 Input_Voltage;UINT16 Standby_Voltage;UINT8 GPS_Temperature;UINT32 Distance;INT16 Horizontal_angle;INT16 Vertical_angle;UINT8 Switch1;UINT8 Switch2;UINT8 Switch3; UINT8 WorkingState;INT16 LAC;INT16 CI;}gps_struct;//48BTYES
sizeof(gps_struct)就不是48BTYES。为了确保上传字节的准确性,方便平台的解析,我们有时候要消除字节对齐带来的影响。因此__attribute__( ( packed, aligned( 1 ) ) ),使得结构体按1字节对齐,从而符合直观地字节位置的分析。从而我们可以把上面的结构体改成
typedef struct{ INT32 Longitude;INT32 Latitude;UINT16 Speed;UINT16 Height;UINT16 ForDirect;UINT8 GPS_Year;UINT8 GPS_Month;UINT8 GPS_Day;UINT8 GPS_Hour;UINT8 GPS_Minute;UINT8 GPS_Second;UINT8 GPS_State;UINT32 WorkingTime;UINT8 GSM_State;UINT8 BAT_Voltage;UINT16 Input_Voltage;UINT16 Standby_Voltage;UINT8 GPS_Temperature;UINT32 Distance;INT16 Horizontal_angle;INT16 Vertical_angle;UINT8 Switch1;UINT8 Switch2;UINT8 Switch3; UINT8 WorkingState;INT16 LAC;INT16 CI;}__attribute__( ( packed, aligned( 1 ) ) )gps_struct;
0 0
- 消除字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- 字节对齐
- C++ Class Size (C++ 类大小)
- ONLG表达式中做地址转换器
- 已命名的变量
- 分布式搜索elasticsearch配置文件详解
- COM原理(一)
- 消除字节对齐
- 解决DB之间且不同tablespace之间的数据导出导入操作(expdp和impdp)
- 结构体中定义函数指针
- Android自定义TitleBar 自定义标题栏 并进行事件处理
- IPSEC.SECRETS(5) - IKE/IPsec认证所使用到的密钥信息
- acm 求组合数方法
- 65 另一种阶乘问题
- 阿里电话面试
- 类似标准检查方式,用函数方式返回消息显示