本文讲述如何获取float型数据对应的整型数值(注意不是通过强制类型转换来获得的),网上有正规的操作方式,是通过一定的方法来计算小数点后的数据。本文讲述一个比较简单巧妙的方法。
操作步骤
使用联合体来获取,代码如下,
#include <stdio.h>
#include <stdint.h>
typedef union {
float fData;
uint32_t uiData;
} myType;
int main()
{
float f = 10.02;
myType data;
data.fData = f;
printf("0x%x\n", data.uiData);
return 0;
}
代码中浮点数值是10.02,存入到联合体data.fData后,其对应的整型数值就会自动转到data.uiData里,巧妙的利用了联合体内成员共享内存空间的特性,本代码中需要注意的是要保证这2个成员所占空间一样。
最后打印如下,
如果是double类型,那么就应该这样写,
typedef union {
double fData;
uint64_t uiData;
} myType;
验证
一种是按照标准方法去验证,这里不展开,网上有很多。。。
另外一种是把浮点数据的地址转成uint8_t的,然后逐个字节查看,代码如下,
#include <stdio.h>
#include <stdint.h>
int main()
{
float f = 10.02;
uint8_t * ptr = (uint8_t*)(&f);
for (uint32_t i = 0; i < sizeof(f); ++i)
{
printf("0x%02X ", ptr[i]);
}
printf("\n");
return 0;
}
最后打印如下, 可以看出和前面使用联合体算出的值是一样的。
|