C在结构中将不同的并集倍数

时间:2019-06-25 13:11:48

标签: c

我必须以不同的格式(十六进制和浮点数)访问和写入变量。为了解决这个问题,我使用了并集,使我可以像float或Hex那样写变量。

我在“大”结构中使用了它,因为我多次遇到这个问题。 现在逐行运行程序,我看到它正在同时在所有联合中编写。 (在Eclipse C / C ++上)我绝对不想要那样的方法,是否有一种解决方法可以保留联合,但可以强制它们成为变量变量?

我试图将联合名称反转:stillingDia(在{uint32_t ...}之前和之后)

// In Header file
typedef struct sensorParametersSensorSpecific{
    union {uint32_t i; float f;}stillingDia ;
    union {uint32_t i; float f;}stillingHei ;
}sensorParametersSensorSpecific_t;

//In another source file
void sensorSpecificInit(sensorParametersSensorSpecific_t* SS){
    SS->stillingDia.f   =100; // This write in the two union...
    SS->stillingHei.f   =0.5;
}

// in my main code
int main(){
    struct sensorParametersSensorSpecific SS;
    sensorSpecificInit(&SS);
    printf("Dia : %f\n",SS.stillingDia.f); // prints 100.000000
    printf("hei : %f\n",SS.stillingHei.f); // prints 0.5 (problem solved ?)
return 0;
}

我希望它在每个联合中都表现得像单独的变量一样…… 也许有一种更聪明的方法,我愿意接受每一个提示。

1 个答案:

答案 0 :(得分:2)

您为每次printf的调用都打印相同的变量。

此:

printf("hei : %f\n",SS.stillingDia.f); // prints 100.000000

应该是这样:

printf("hei : %f\n",SS.stillingHei.f); // doesn't print 100.000000

Eclipse另有说明的事实,那么……您期望什么?