【发布时间】:2021-02-24 21:03:50
【问题描述】:
我正在尝试构建自己的函数,将十六进制数转换为十进制整数。
#include <stdio.h>
#include <string.h>
#define SIZE 30
/* this code will conver string hexo number to integer */
int myhtoi(char[]);
int main(int argc, char const *argv[])
{
char heX[SIZE];
scanf("%s", heX);
printf("%d", myhtoi(heX));
return 0;
}
int myhtoi(char input[])
{
int i = 0;
int num = 0;
int result = 0;
for(i = strlen(input); i >= 0;i --)
{
if((input[i] >= 'a' && input[i] <= 'f') || (input[i] >= 'A' && input[i] <= 'F'))
{
switch (input[i])
{
case 'a':
num = 10;
break;
case 'b':
num = 11;
break;
case 'c':
num = 12;
break;
case 'd':
num = 13;
break;
case 'e':
num = 14;
break;
case 'f':
num = 15;
break;
case 'A':
num = 10;
break;
case 'B':
num = 11;
break;
case 'C':
num = 12;
break;
case 'D':
num = 13;
break;
case 'E':
num = 14;
break;
case 'F':
num = 15;
break;
default:
break;
}
}
num = input[i];
printf("%d\n", num);
printf("%c\n", input[i]);
result = result + num;
}
return result;
}
我的逻辑是,当输入被插入时,它从 char 数组的末尾读取它并一直扫描到前面。
但是,它给了我不正确的输出。 我想我可能对 char 和 integer 在 C 中的工作方式没有完全理解。
有人能告诉我这段代码的问题在哪里吗?
【问题讨论】:
-
你错过了 else 条件
-
strtol (ptr, &endptr, 0)是另一种处理八进制和十六进制转换的快速方法。 (在你锻炼之后——这是一个很好的锻炼) -
注意字符
'1'不是整数1 -
你可以用
num=tolower(input[i]) - 'a' + 10替换你的switch声明