如何将16位int转换为浮点数?
我有一个签名的16位变量,我告诉我需要以3位小数的精度显示,所以我认为这将涉及转换为浮点数?
我已尝试过以下操作,只需将我的16位复制到浮点数中,但这看起来并不合适。
float myFloat = 0;
int16_t myInt = 0x3e00;
memcpy(&myFloat, &myInt, sizeof(int));
我也读过有关半精度浮点格式但我不确定如何处理这个...如果需要的话。
我正在使用GCC。
更新: 数据源是一个char数组[2],我从i2c接口获得。然后我将它们拼接成一个带符号的int。
有人可以帮忙吗?
答案 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));