此函数应该将整数值转换为十六进制的32位浮点表示。但我不明白第3行实际上做了什么。任何人都可以详细说明吗?
void convert_to_IEEE754( int value, char* ieee754_str ) {
float ieee754_value = (float) value / 1000; // value is pre-multiplied by 1000
byte* array = (byte*) &ieee754_value;
sprintf( ieee754_str, "%02x%02x%02x%02x", array[3], array[2], array[1], array[0] );
}
答案 0 :(得分:2)
这个演员:
byte* array = (byte*) &ieee754_value;
将值&ieee754_value
转换为byte *
类型,以便将其分配给变量array
。如果没有强制转换,表达式&ieee754_value
的类型为float *
,并且无法将此类值分配给byte *
类型的变量。因此演员阵容是必要的。
然后使用array
指针读取构成值的字节。
这不是推荐的技术,最好使用union
:
union {
float ieee754_value;
byte bytes[4];
} tmp = { .ieee754_value = (float) value / 1000 };
然后通过tmp.bytes
访问字节。