获取浮点数的IEEE单精度位

mc_*_*ron 2 c embedded xilinx

我需要将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语言.

Dan*_*her 5

你可以使用带有联合的类型惩罚,

union {
    float f;
    uint32_t u;
} un;
un.f = your_float;
uint32_t target = un.u;
Run Code Online (Sandbox Code Playgroud)

获得位.或者你可以使用memcpy.