【发布时间】:2019-10-05 04:52:27
【问题描述】:
int htoi(char s[]) {
int c;
int sum = 0;
int counter = 0;
for (int i = sizeof(s)/sizeof(s[0]) - 2; (c = tolower(s[i])) >= 'a' && (c = tolower(s[i]) <= 'f'); i--) {
int temp = (int) pow(16, counter) * (c - 87);
sum += temp;
counter++;
}
return sum;
}
我正在调用该方法:
int main()
{
char s[] = "FFF";
printf("%d\n", htoi(s));
}
我刚开始学习 C。我正在尝试创建一个将十六进制转换为十进制的方法,但以下代码不起作用。它在我的终端上输出 -87,我不知道为什么。
编辑:刚刚意识到我的代码没有考虑实际数字,但是当我输入“FFF”作为输入数组时,无论哪种方式都不起作用。
【问题讨论】:
-
sizeof(s)这里是指针的大小——而不是数组的大小。你这样做是为了达到什么目的? -
我的目标是从数组的末尾迭代到开头。你能告诉我如何获得数组的大小吗?我认为数组几乎等同于 C 中的指针!
-
数组不是指针——指针不是数组。将数组大小传递给函数。
-
请发布Minimal, Complete, and Verifiable example,包括您调用
htoi的代码。 -
注意:
(c = tolower(s[i]) <= 'f')也是错误的,它会根据比较结果将0或1分配给c。
标签: c