由于某种原因,当将整数转换为浮点数时(在Arduino上使用c(-ish)),我得到了一些非常意外的结果。
过去,我在arduino上遇到内存问题,因此这可能是有用的故障排除提示或红色鲱鱼...。
无论如何,这是我的代码(仅相关部分),给出的值为“ 6/8”,这将导致meterValue = 0.75:
我的功能:
int getIntegerFromFileStream(File f, char* previewedChar) {
int num = 0;
while (48 <= *previewedChar && *previewedChar <= 57) {
// Ascii range 48-57 represents digits 0-9
num = (num*10) + atoi(previewedChar);
*previewedChar = f.read();
}
Serial.print(F("Found integer: "));
Serial.println(num);
}
主要代码:
[.... rest of my code ....]
// Get the value for the meter from the fractional form (ex: 4/4 or 6/8)
meterValue = (float)getIntegerFromFileStream(file, &inputChar);
Serial.print(F("New meter value: "));
Serial.println(meterValue);
if (inputChar == '/') {
inputChar = file.read(); // move past the '/'
meterValue /= (float)getIntegerFromFileStream(file, &inputChar);
Serial.print(F("New meter value: "));
Serial.println(meterValue);
}
[.... rest of my code ....]
这是上面代码的输出:
找到的整数:6
新的仪表值:3.00
找到的整数:8
新的仪表值:1.00
新的仪表值:1.00
从输出中可以看到,整数本身已经被正确解析,但是一旦离开函数并将其强制转换为浮点数,其值就会更改(而不是通常的float-decimal-error方式)。
任何提示将不胜感激!
编辑:
发现我的newb错误:我的getInt函数没有返回值,因此导致未定义的行为。
事实证明,默认情况下,Arduino不会在编译期间发出警告,除非您专门进入Preferences并打开“ verbose”输出进行编译。设置好之后,我便可以看到这些警告。(目前仅对此进行编辑,因为我对于stackoverflow而言还太陌生,无法回答自己的问题,一旦时间到了,我就会这样做)
发现我的newb错误:我的getInt函数没有返回值,因此导致未定义的行为。
事实证明,默认情况下,Arduino不会在编译期间发出警告,除非您专门进入Preferences并打开“ verbose”输出进行编译。设置好之后,我便可以看到这些警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句