C++ Xilinx微晶玻璃结构填料/填料
我有两种结构:C++ Xilinx微晶玻璃结构填料/填料,c++,c,gcc,xilinx,microblaze,C++,C,Gcc,Xilinx,Microblaze,我有两种结构: Struct _size1 { union{ short a; struct { char b; char c; }d; struct { char x; char y; }z; };
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;
以及:
sizeof(size1)=4;
sizeof(size2)=12
我想得到的尺码是2号的10码
它在num3和st_size之间添加了两个字节的填充。。Microblaze编译器不支持Pragma包
我正在尝试使用属性((打包))但没有任何成功
Struct _size2 {
short num; //2 bytes
short num2; //2 bytes
short num3; //2 bytes
size1 st_size; //4 bytes
}size2 __attribute__((packed));
我不确定是什么问题,也不确定这样做是否有效
谢谢您使用的是
unsigned int
位字段类型,在gcc/Microblaze上为4字节
使用gcc implemantation定义的无符号短位字段类型,使gcc/Microblaze的大小为2字节。我正在一个头文件中成功地使用它来描述以太网头:
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
代码中的错误在于,您将这些部分混合在一起,并试图将\uuuu attribute\uuuuu((打包))
应用于名为size2
的变量
struct eth_hdr_st eht_header;