c - cast 指针在这段代码中做了什么?

标签 c pointers casting arduino

此函数应该将整数值转换为 32 位十六进制浮点表示形式。但我不明白第三行实际上做了什么。谁能详细说明一下?

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] );
}

最佳答案

这个 Actor :

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

关于c - cast 指针在这段代码中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35892766/

相关文章:

c - 彼得森算法对各种优化标志的行为

scanf 后 CLion 不会在控制台中打印

C++ 参数是指向常量对象的指针,但未返回更新的对象?

c - 在C中以小写形式获取文件扩展名

c - 德尔福指针类型转换

C++ 删除 static_cast<void*> (指针)行为

c++ - 我可以使用枚举作为结构名称吗?

c - ==符号是什么意思?

将指针强制转换为 long *

c# - Linq to Entities 和复杂类型转换