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;