通过union成员进行联合访问的C ++结构

时间:2014-10-24 09:53:00

标签: c++ struct unions

我有一个由一个由一个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(是MesswertNummerPart)而不是0x023000020001(0x02-> AggregatTyp,0x30-> AggregatSubm 0x0002-> AggregatNummer,0x0001-> MesswertNummerPart)

如何通过调用Var.MesswertNummerFull获取整个数字?

1 个答案:

答案 0 :(得分:0)

通过再次输入来解决问题。 MesswertNummerFull必须是uint64_t(16 + 16 + 8 + 8 = 48)