更有效的处理我的数据的方法(整数和浮点数)

Ste*_*ven 2 c++ types

对于十六进制,我的大脑放屁很多.有些人是灵巧的,而其他人只是简单的右手...好吧,有点像那样,我猜我是非常基础的.

无论如何......我正试图让一些固件更有效率.我们有一个功能,它根据通过CANBUS获得的一些十六进制数据来计算车辆的速度.现在我正在将它转换为浮点数,所以我可以把它包裹起来,但是我想知道如果我们把它留在整数格式中,我们是否会使用更少的ROM空间?这可以做到而不会失去准确性吗?现在我的花车精确到1/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;
}
Run Code Online (Sandbox Code Playgroud)

所以上面的数据会转化为:

99.7500 99.6250 99.6875 100.3750 99.6875

这确实反映了以kph为单位的车辆的真实速度.对于我们的应用,我们并不关心真正的速度是什么,因为一切都是相对的.只要我们不失去决心,我们就会感到高兴.我想过只保留INT形式的所有内容,但是当你除以16时它只是截断.

我对大多数事情都不是个白痴......但我对base2来说是个白痴.

Lil'帮忙吗?谢谢.

Meh*_*ari 8

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

  • 对.这种技术与仅以美分进行财务计算相当(而非分数美元.cents). (2认同)