C - 将存储为无符号长整型的定点数转换为浮点数



我以 q16.4 格式从传感器读取有符号的小数值,并通过 i2c 总线接收此值作为无符号长整型。我想将此值转换为浮点数以执行算法。我试图将其转换为像这样浮动:

float vOut = (float)read_data * 65536;

没有结果。数据看起来仍然与点unsigned long。你能给我的建议吗?

尝试:

float vOut = read_data;
vOut /= 16.0f;

除以 16 会将定点数的四个小数位推入浮点数的小数位。

抱歉,不是更详细的 GTG。

uint8_t tab[3];
Read_sensor(tab);
unsigned long ul = tab[0];
ul <<= 8; 
ul |= tab[1];
ul <<= 4; 
ul |= tab[2] & 0xF;
// I am fuzzy on q16.4  format, so some assumptions.
// Assuming Bit 19 is the sign bit and data is sign-magnitude
float x = ul & 0x7FFFFL;
x /= 16.0f;
if (ul & 0x80000L) {
  x = -x;
}

最新更新