查找将16位无符号整数转换为double的函数的反函数

时间:2016-10-10 04:48:45

标签: c integer double type-conversion 16-bit

我有一个函数,它接受一个16位无符号整数值并将其转换为double。数据来自温度传感器(MCP9808),该函数将其转换为摄氏度。

该功能定义如下:

double convert_tempc(uint16_t data) {
    double temp = data & 0x0FFF;
    temp /=  16.0;
    if (data & 0x1000) temp -= 256;
    return temp;
} 

我的问题是,如何执行这一系列操作的反转?

我需要一个函数来查找此传感器产生的16位值,从而产生以摄氏度为单位的给定温度。

由于16位值只能表示有限数量的值,我想逆函数需要找到可以表示的最近的双精度,然后执行逆转换。

有没有简单的方法可以做到这一点?

该函数是用C语言编写的,但我将用Python实现它。

1 个答案:

答案 0 :(得分:1)

以下是一些验证评论中提出的公式的代码。

def u16_to_float(data):
    temp = data & 0x0FFF
    temp /=  16.0
    if data & 0x1000:
        temp -= 256
    return temp

def float_to_u16(temp):
    return int(temp * 16) & 0x1FFF

# test

for data in range(0x2000):
    temp = u16_to_float(data)
    u = float_to_u16(temp)
    assert u == data, (data, temp, u)

print('Ok')