mof*_*tje 4 c++ floating-point unions
在我的C++代码中,我已经声明了一个联合:
typedef union U_FloatParse {
float float_data;
unsigned char byte_data[4];
} U_FloatConvert;
Run Code Online (Sandbox Code Playgroud)
然后,我将byte_data数组设置为值0,0,192,127:
U_FloatConvert depth_data;
depth_data.byte_data[0] = 0;
depth_data.byte_data[1] = 0;
depth_data.byte_data[2] = 192;
depth_data.byte_data[3] = 127;
printf("\n\nFloat = %f\n\n", depth_data.float_data);
Run Code Online (Sandbox Code Playgroud)
作为输出我得到NaN.为什么我没有得到正常的浮点值?当我传递值时:56,137,33,63.我得到浮点值0.631000.
NaN 是正常的浮点值,您设置的字节被正确解释为有效的NaN.
话虽这么说,你可能得到输出"没有勺子 NaN",因为以这种方式使用联合在C++中有未定义的行为.您只能在任何给定时间使用工会成员之一.这不是重新诠释的捷径!