Arduino中字符串存储的ASCII值转整数异常问题咨询
问题分析与解决
你代码的核心问题是混淆了ASCII码的字符串形式和ASCII字符对应的整数值:
- 你存储的
"59"是字符串形式的数字,atoi()会直接把它解析成整数59,这是字符串本身代表的数值; - 但你想要的是把这个数值(注:整数2对应的ASCII码是十进制50,即十六进制0x32,你原注释里的"59"是笔误)作为ASCII码,转成对应的字符('2'),再得到这个字符代表的整数2。
修正后的代码
String a = "50"; // 整数2对应的ASCII值是十进制50(十六进制0x32) // 1. 先把字符串转成ASCII码的整数 int ascii_code = atoi(a.c_str()); // 2. 将ASCII码转成对应的字符 char target_char = char(ascii_code); // 3. 把字符转成对应的整数('0'的ASCII是48,用字符减'0'即可得到对应整数) int num = target_char - '0'; Serial.println(num); // 此时输出结果为2
简化写法
如果不需要中间变量,也可以合并成一行:
String a = "50"; int num = char(atoi(a.c_str())) - '0'; Serial.println(num);
内容的提问来源于stack exchange,提问作者Jx Knight
相关产品推荐
相关产品推荐

