演员指针在这段代码中做了什么?

时间:2016-03-09 13:20:41

标签: c pointers casting arduino

此函数应该将整数值转换为十六进制的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] );
}

1 个答案:

答案 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访问字节。