【发布时间】:2021-04-24 11:39:08
【问题描述】:
我有一个浮点值,它应该只取 -40 到 +120 之间的值。对于给定的数据传输功能,我需要将其转换为 uint16(或两个 uint8)。将这个有限的十进制范围映射到 uint16 的所有可能值的最简洁方法是什么?
因此,如果浮点数 120,则为 65535,如果在范围内,则只是线性关系(因此增量约为 0.0024)。
【问题讨论】:
-
16 位整数中的每个值都将对应于
161.0 / 65536.0(如您所见,大约为0.0025)。所以首先你需要对输入值进行零偏移(即添加40),然后除以161.0 / 65536.0,得到相应的整数值。无论如何,这就是数学解决方案,但它不会为您提供您可能希望的确切值(-40.0除外,它确实是0)。 -
@Someprogrammerdude
(120.0+40.0) / (161.0/65536) != 65535根据需要。应该是160.0/65535.0。显然您已经提供了答案 - 为什么将 int 作为评论发布?
标签: c