Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中十六进制到十进制的转换错误_C - Fatal编程技术网

C语言中十六进制到十进制的转换错误

C语言中十六进制到十进制的转换错误,c,C,我刚刚开始学习C语言。我试图创建一个将十六进制转换为十进制的方法,但是下面的代码不起作用。它在我的终端上输出-87,我不知道为什么 编辑:刚刚意识到我的代码没有考虑实际的数字,但无论哪种方式,当我输入“FFF”作为输入数组时,它都不起作用 代码有问题: 它错误地使用sizeof(s)来查找“array”char s[]的大小,但是s是一个指针。调用代码的s是一个数组,但当用作函数参数时,它会转换为第一个元素(指针)的地址。尤其是当用作函数参数时,char s[]是一个指针 它将c分配给比较的结果

我刚刚开始学习C语言。我试图创建一个将十六进制转换为十进制的方法,但是下面的代码不起作用。它在我的终端上输出-87,我不知道为什么

编辑:刚刚意识到我的代码没有考虑实际的数字,但无论哪种方式,当我输入“FFF”作为输入数组时,它都不起作用

代码有问题:

它错误地使用
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;
  ...