联合中的C++结构访问联合成员

C++ struct in union acces over union member

本文关键字:访问 成员 结构 C++      更新时间:2023-10-16

我有一个结构,它由一个并集组成,并集由一个uint32_t和另一个(匿名)结构组成。它看起来像这样:

struct sMesswertNummer {
union {
    uint32_t MesswertNummerFull;
    struct {
        uint16_t MesswertNummerPart:16;
        uint16_t AggregatNummer:16;
        uint8_t  AggregatSub:8;
        uint8_t  AggregatTyp:8;
    };
};
sMesswertNummer() { this->MesswertNummerFull=0; }
sMesswertNummer(uint16_t MesswertNummerPart,uint16_t AggregatNummer, uint8_t AggregatSub, uint8_t AggregatTyp) {
    this->MesswertNummerFull=0;
    this->MesswertNummerPart=MesswertNummerPart;
    this->AggregatNummer=AggregatNummer;
    this->AggregatSub=AggregatSub;
    this->AggregatTyp=AggregatTyp;
}
};

我用类似的构造函数调用来初始化结构

MesswertNummer(0x0001,0x0002,0x30,0x02);

之后,我的变量具有正确的值,Var.MesswertNummerPart是0x0001,Var.AggregatNummer是0x0002,依此类推

但是,如果我调用Var.MesswertNummerFull,我会得到0x0001(是MesswertNumerPart),而不是0x02300002001(0x02->AggregateTyp,0x30->AggregationSubm 0x0002->Aggregate Nummer,0x0001->MesswertSummerPart)

如何通过调用Var.MesswertNummerFull来获取整个号码?

只需再次键入即可解决问题。MesswertNummerFull必须是uint64_t(16+16+8+8=48)