写了一个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;
};