一谈到十六进制,我的脑子里就放屁很多。有些人很灵巧,有些人只是右撇子……好吧,有点像那样,我猜我是 base10。
无论如何...我正在尝试使一些固件更高效。我们有一个函数可以根据通过 CANBUS 获得的一些十六进制数据计算车辆的速度。现在我正在将它转换为 float ,这样我就可以全神贯注了,但我想知道如果我们将它保留为整数格式,我们是否会使用更少的 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;
}
所以上面的数据将转化为:
99.7500 99.6250 99.6875 100.3750 99.6875
这确实准确地反射(reflect)了车辆以公里/小时为单位的真实速度。但是对于我们的应用程序,我们并不真正关心真正的速度是多少,因为一切都是相对的。只要我们不失去决心,我们就很高兴。我考虑过将所有内容都保留为 INT 形式,但是当您除以 16 时它只会截断。
我对大多数事情都不是白痴......但我是 base2 的白痴。
小的帮助?谢谢。
最佳答案
不要除以 16.0。您仍然可以比较、排序、增加或减少速度。
关于c++ - 处理我的数据的更有效方式(整数与 float ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376626/