写了一个union去485串口读取读取sensor数据
union Data
{
unsigned char byte[2];
int sensor_data;
};
这样用:
Data data2;
data2.byte[0] = buf[7];
data2.byte[1] = buf[6];
std::cout<<"data is "<<data2.sensor_data<<std::endl;
float value = data2.sensor_data;
std::cout<<"value is"<<value<<std::endl;
现象:
buf里的数值正确(可能为0x03 0x11),如果直接运行这一段打印的value值是正确的(比如为785),但是把第四行打印注释掉,则打印的value数值是一个非常大的不确定的值。
原因:
union里的sensor_data没有初始化,改成下面的形式不加第四行打印也能正确现实value值。初始化是很重要的。
union Data
{
unsigned char byte[2];
int sensor_data = 0;
};
本文通过一个使用union数据结构从485串口读取传感器数据的例子,探讨了union内部成员变量初始化对于程序稳定性的影响。当union内的成员未正确初始化时,可能会导致不可预期的行为。文章展示了如何通过简单修改来解决此问题。
4041

被折叠的 条评论
为什么被折叠?



