将int16转换为C中的float

时间:2017-09-12 14:59:02

标签: c floating-point int

如何将16位int转换为浮点数?

我有一个签名的16位变量,我告诉我需要以3位小数的精度显示,所以我认为这将涉及转换为浮点数?

我已尝试过以下操作,只需将我的16位复制到浮点数中,但这看起来并不合适。

float myFloat = 0;
int16_t myInt = 0x3e00;
memcpy(&myFloat, &myInt, sizeof(int));

我也读过有关半精度浮点格式但我不确定如何处理这个...如果需要的话。

我正在使用GCC。

更新: 数据源是一个char数组[2],我从i2c接口获得。然后我将它们拼接成一个带符号的int。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

  

我有一个签名的16位变量,我告诉我需要显示   准确度为3位小数

如果有人告诉你,integer值可以这样显示,他/她应该从C begginers课程开始。

唯一的可能性是整数值已经缩放(相乘)。例如,如果乘以1000,则12.456的值可以存储在整数中。如果是这样的话:

float flv;
int intv = 12456;

flv = (float)intv / 1000.0f;

您也可以打印此缩放的整数而不转换为float

printf("%s%d.%03d\n", intv < 0 ? "-": "", abs(intv / 1000), abs(intv % 1000));