我有两种结构:
Struct _size1 {
union{
short a;
struct {
char b;
char c;
}d;
struct {
char x;
char y;
}z;
};
union{
short a1;
struct {
char b1;
char c1;
}d1;
struct {
char x1;
char y1;
}z1;
};
}size1;
和
Struct _size2 {
short num; //2 bytes
short num2; //2 bytes
short num3; //2 bytes
size1 st_size; //4 bytes
}size2;
sizeof(size1)= 4; sizeof(size2)= 12;
我想要获得的尺寸是尺寸2的10。
在num3和st_size之间添加两个字节的填充.. Microblaze编译器不支持Pragma Pack
我正在尝试使用属性((已打包)),但没有取得任何成功......
Struct _size2 {
short num; //2 bytes
short num2; //2 bytes
short num3; //2 bytes
size1 st_size; //4 bytes
}size2 __attribute__((packed));
我不确定什么是错的,或者这是否也是这样的。
由于
答案 0 :(得分:1)
你正在使用g {/ Microblaze上4字节的unsigned int
位字段类型。
使用gcc实现定义的unsigned short
位字段类型,使用gcc / Microblaze的大小为2个字节。
答案 1 :(得分:0)
我已在我的头文件之一中成功使用它来描述以太网头:
struct eth_hdr_st {
unsigned char dst_addr[6];
unsigned char src_addr[6];
unsigned short datatype;
} __attribute__ ((__packed__));
然后我就这样使用它:
struct eth_hdr_st eht_header;
请注意,第一部分是名为eth_hdr_st
的结构的结构定义;第二部分是声明名为eth_header
的变量struct eth_hdr_st
代码中的错误是,您将这些部分混合在一起,并试图将__attribute__((packed))
应用于名为size2
的变量。