ASCII数字字符转数值:MinGW64下如何得到预期数字输出
解决方法:将字符数字转换为对应整数数值
你的问题出在字符数字的ASCII值和实际整数数值的差异上:比如字符'4'的ASCII编码是52,'3'是51,当你把char类型的字符直接赋值给int类型的num_of_times时,编译器会自动将字符转换为对应的ASCII数值,所以输出的是52、51而非预期的4、3。
正确的转换方式
只需要用字符数字减去字符'0'的ASCII值即可——因为ASCII表中'0'到'9'是连续排列的,'0'的ASCII值是48,所以'4' - '0'就等于52 - 48 = 4,正好得到你想要的整数数值:
std::string encodedstr; if(std::isdigit(encodedstr.at(i))) { num_of_times = encodedstr.at(i) - '0'; // 关键修改 std::cout << num_of_times << "\n"; }
为什么static_cast<char>没用?
如果你把num_of_times定义为int类型,就算你用static_cast<char>(encodedstr.at(i))转换,赋值给int变量时还是会被自动提升为对应的ASCII数值,cout输出的依然是52、51。只有当num_of_times是char类型且你想输出字符本身时,这个转换才有意义,但你需要的是整数数值,所以直接减'0'是最直接高效的方案。
内容的提问来源于stack exchange,提问作者user2650277
相关产品推荐
相关产品推荐

