如何解决十六进制到十进制的转换使用隐式类型转换
我认为我的 vs 代码中存在一些问题,即使在编写了正确的代码之后,我还是对这些编码的新手,它几乎在我编写的每一秒代码中都会给我错误的结果,我得到的结果不确定请帮我解决这个问题,请检查在您的机器上运行此代码....
#include <iostream>
using namespace std;
int main()
{
char a[30];
cout << "enter the hexadecimal";
cin >> a;
int i = 0,c,digit,decimal = 0,p = 1;
while (a[i] != '\0') {
i++;
}
for (int j = i; j >= 0; j--) {
c = a[j];
if (c >= 48 && c <= 57) {
digit = c - 48;
}
else if (c >= 97 && c <= 112) {
digit = c - 87;
}
decimal += digit * p;
p *= 8;
}
cout << "\ndecimal is " << decimal;
return 0;
}
输入十六进制时请只输入小写字母,我没有考虑大写字母
要检查十六进制到十进制,请使用此站点 https://www.rapidtables.com/convert/number/hex-to-decimal.html?x=146
解决方法
代码有几个问题,但我认为主要的问题是当 p 应该是 16 时,你却将 p 乘以 8(因为十六进制是 base-16,而不是 base-8)。
您还应该注意无效输入。例如,如果有人输入了无效的字母“j”,会发生什么?
此外,当您计算字符串的初始长度时,您将 i
设置为具有 '\0' 值的数组的位置,因此当您开始处理输入时,a[i]
是0 并导致使用未初始化的变量(digit
尚未赋值,这与之前的“无效输入”问题有关)。
顺便说一句,我也会在比较中使用字符而不是 ASCII 代码,这样更容易看到您要查找的内容:
if (c >= '0' && c <= '9') {
digit = c - '0';
}
等等...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。