我需要将十六进制字符串转换为十进制值。我已经使用了以下方法。但有时它会返回错误的十进制值。Arduino十六进制到十进制转换
十六进制字符串在此格式“00 00 0C 6E”
unsigned long hexToDec(String hexString) {
unsigned long decValue = 0;
int nextInt;
for (long i = 0; i < hexString.length(); i++) {
nextInt = long(hexString.charAt(i));
if (nextInt >= 48 && nextInt <= 57) nextInt = map(nextInt, 48, 57, 0, 9);
if (nextInt >= 65 && nextInt <= 70) nextInt = map(nextInt, 65, 70, 10, 15);
if (nextInt >= 97 && nextInt <= 102) nextInt = map(nextInt, 97, 102, 10, 15);
nextInt = constrain(nextInt, 0, 15);
decValue = (decValue * 16) + nextInt;
}
return decValue;
}
什么是String类型? map()函数做了什么?这是真的C给'hexString.length()'?它可能是,除了'nextInt = long(hexString.charAt(i));'在C中肯定是无效的(尽管它在C++中可能是有效的)。你没有展示如何调用代码,或者样例输入转换OK,或者样本输入失败(不清楚“00 00 0C 6E”通过还是失败)。 “ –
”有时会返回错误的十进制值。“首先找到一个返回错误十进制值的具体示例。然后使用调试器或在您的代码中添加'printf()'语句来查看变量运行时的值。当你浏览你的代码时,找出哪些值是意想不到的,然后找出它们不符合你的期望的原因。 –
[将HEX字符串转换为arduino中的十进制](https:// stackoverflow。com/questions/31830143/convert-hex-string-to-decimal-in-arduino) – TomServo