C语言中十六进制到十进制的转换错误
我刚刚开始学习C语言。我试图创建一个将十六进制转换为十进制的方法,但是下面的代码不起作用。它在我的终端上输出-87,我不知道为什么 编辑:刚刚意识到我的代码没有考虑实际的数字,但无论哪种方式,当我输入“FFF”作为输入数组时,它都不起作用 代码有问题: 它错误地使用C语言中十六进制到十进制的转换错误,c,C,我刚刚开始学习C语言。我试图创建一个将十六进制转换为十进制的方法,但是下面的代码不起作用。它在我的终端上输出-87,我不知道为什么 编辑:刚刚意识到我的代码没有考虑实际的数字,但无论哪种方式,当我输入“FFF”作为输入数组时,它都不起作用 代码有问题: 它错误地使用sizeof(s)来查找“array”char s[]的大小,但是s是一个指针。调用代码的s是一个数组,但当用作函数参数时,它会转换为第一个元素(指针)的地址。尤其是当用作函数参数时,char s[]是一个指针 它将c分配给比较的结果
sizeof(s)
来查找“array”char s[]
的大小,但是s
是一个指针。调用代码的s
是一个数组,但当用作函数参数时,它会转换为第一个元素(指针)的地址。尤其是当用作函数参数时,char s[]
是一个指针
它将
c
分配给比较的结果c=tolower(s[i])sizeof(s)
这里是指针的大小,而不是数组的大小。你想通过这样做来实现什么?我的目标是从数组的末尾到开头进行迭代。你能告诉我如何得到数组的大小吗?我认为数组相当于C中的指针!数组不是指针-指针不是数组。将数组大小传递到函数中。请发布一个包含调用htoi
的代码的命令。注意:(c=tolower(s[i])
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));
}
int htoi(const char *s) {
int sum = 0;
while (isxdigit((unsigned char) *s)) {
int digit_value;
int char_value = (unsigned char) *s++; // Get unsigned value and advance s
if (isdigit(char_value)) {
digit_value = *s - '0';
} else {
digit_value = tolower(char_value) - 'a' + 10;
}
sum = sum * 16 + digit_value;
}
return sum;
}
unsigned htou(const char *s) {
unsigned sum = 0;
...