此函数应该将整数值转换为 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/