我有一个由一个由一个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获取整个数字?
答案 0 :(得分:0)
通过再次输入来解决问题。 MesswertNummerFull
必须是uint64_t
(16 + 16 + 8 + 8 = 48)