我需要将IEEE单精度浮点数写入特定地址的32位硬件寄存器.为此,我需要将float类型的变量转换为无符号整数.我可以像这样得到整数表示:
float a = 2.39;
unsigned int *target;
printf("a = %f\n",a);
target = &a;
printf("target = %08X\n",*target);
Run Code Online (Sandbox Code Playgroud)
返回:
a = 2.390000
target = 4018F5C3
Run Code Online (Sandbox Code Playgroud)
都好.但是这会导致编译器警告"cast.c:12:警告:从不兼容的指针类型分配"
有没有其他方法可以做到这一点,不会产生警告?这是针对特定的硬件,我不需要处理不同的字节顺序等,并且我不想因为性能原因而循环遍历每个字符串,因为其他一些问题往往会提示.看起来您可以在C++中使用reinterpret_cast,但我使用的是C语言.
你可以使用带有联合的类型惩罚,
union {
float f;
uint32_t u;
} un;
un.f = your_float;
uint32_t target = un.u;
Run Code Online (Sandbox Code Playgroud)
获得位.或者你可以使用memcpy.