结构体位对齐的问题

childman 2010-07-15 11:40:06
GCC编译器中定义如下:
struct iec_i {
u_char ft :1;
u_short ns :15;
u_char res :1;
u_short nr :15;
}__attribute__((__packed__));

struct iec_s {
u_char ft :1;
u_short res1 :15;
u_char res2 :1;
u_short nr :15;
}__attribute__((__packed__));

struct iec_u {
u_char ft :2;
u_char start_act :1;
u_char start_con :1;
u_char stop_act :1;
u_char stop_con :1;
u_char test_act :1;
u_char test_con :1;
u_char res1;
u_short res2;
}__attribute__((__packed__));

struct iechdr {
u_char start;
u_char length;
u_char raw[0];
union {
struct iec_i ic;
struct iec_s sc;
struct iec_u uc;
}fc;
}__attribute__((__packed__));

得出:
sizeof(struct iec_i)=4
sizeof(struct iec_u)=4
sizeof(struct iec_s)=4
sizeof(struct iechdr)=6

移植到BCB

#pragma pack(1)

struct iec_i {
u_char ft :1;
u_short ns :15;
u_char res :1;
u_short nr :15;
};

struct iec_s {
u_char ft :1;
u_short res1 :15;
u_char res2 :1;
u_short nr :15;
};

struct iec_u {
u_char ft :2;
u_char start_act :1;
u_char start_con :1;
u_char stop_act :1;
u_char stop_con :1;
u_char test_act :1;
u_char test_con :1;
u_char res1;
u_short res2;
};

struct iechdr {
u_char start;
u_char length;
u_char raw[0];
union {
struct iec_i ic;
struct iec_s sc;
struct iec_u uc;
}fc;
};

得出:
sizeof(struct iec_i)=6
sizeof(struct iec_u)=4
sizeof(struct iec_s)=6
sizeof(struct iechdr)=8

怎样才能做到跟GCC里一样的效果?
...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccrun.com 2010-07-15
  • 打赏
  • 举报
回复
毛毛正解. 楼主可以结帖了. 毛毛+100
Waiting4you 2010-07-15
  • 打赏
  • 举报
回复
struct iec_i {
u_short ft :1;
u_short ns :15; //把类型改成一样
u_short res :1;
u_short nr :15;
};

struct iec_s {
u_short ft :1;
u_short res1 :15;
u_short res2 :1;
u_short nr :15;
};

struct iec_u {
u_char ft :2;
u_char start_act :1;
u_char start_con :1;
u_char stop_act :1;
u_char stop_con :1;
u_char test_act :1;
u_char test_con :1;
u_char res1;
u_short res2;
};

struct iechdr {
u_char start;
u_char length;
u_char raw[0];
union {
struct iec_i ic;
struct iec_s sc;
struct iec_u uc;
}fc;
};
friendbcb 2010-07-15
  • 打赏
  • 举报
回复
顶起来,学习一下
childman 2010-07-15
  • 打赏
  • 举报
回复
谢谢各位解答,已经得到解决

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧