十六进制时,我的大脑放屁很多。有些人很 SCSS ,有些人只是右撇子……好吧,有点像,我猜我很不好。

无论如何...我正在尝试使某些固件更高效。我们有一个功能,可以根据通过CANBUS获得的一些十六进制数据来计算车辆的速度。现在,我正在将其转换为浮点数,以便可以环绕它,但是我想知道如果将其保留为整数格式是否会使用更少的ROM空间?可以做到而又不会失去准确性吗?现在,我的浮标精确到每公里时速的16分之一。我知道此功能似乎很简单,但是每秒运行数百次,这会使它陷入困境。

首先,这是一些示例数据:

[06] [3c] ...
[06] [3a] ...
[06] [3b] ...
[06] [46] ...
[06] [3b] ...

我省略了其他6个字节,因为它们与速度无关。左边的字节我们称为speed_a,右边的字节为speed_b。这是要转换的函数:

float calculateSpeed()
{
    float speed;
    speed = ( ( float )speed_a * 256.0 + speed_b ) / 16.0;
    return speed;
}

因此,以上数据将转换为:

99.7500
99.6250
99.6875
100.3750
99.6875

并确实反射(reflect)了以kph为单位的车辆真实速度。但是对于我们的应用程序,我们并不在乎真正的速度是多少,因为一切都是相对的。只要我们不失去决心,我们就会感到高兴。我考虑过将所有内容都保持为INT形式,但是当您除以16时,它将被截断。

我不是大多数事情上的傻瓜...但是我是base2的傻瓜。

会帮忙吗?谢谢。

最佳答案

根本不要除以16.0。您仍然可以比较,排序,添加或减去速度。

关于c++ - 处理数据的更有效方式(整数与浮点数),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1376626/

10-16 05:31