我以 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;
}