如何从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出?

  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。

回答不易,求求您采纳点赞哦

#include <stdio.h>
#include <ctype.h>
#include <math.h>

int hex2dec(char hex[]) {
  int i, len, dec = 0, base = 1;
  for (len = 0; hex[len] != '\0'; len++);
  for (i = len - 1; i >= 0; i--) {
    if (isdigit(hex[i]))
      dec += (hex[i] - 48) * base;
    else if (isalpha(hex[i]))
      dec += (toupper(hex[i]) - 55) * base;
    base *= 16;
  }
  return dec;
}

int main() {
  char hex[8];
  printf("Enter a hexadecimal number: ");
  scanf("%s", hex);
  printf("Decimal equivalent: %d\n", hex2dec(hex));
  return 0;
}
  • 该代码的作用是从键盘输入一个不超过8位的十六进制数字字符串,然后将其转换为十进制数并输出。

  • 首先,使用scanf函数从键盘输入一个字符串,存入字符数组str中。

  • 然后,通过循环依次处理str中每一个字符,判断该字符是否为十六进制的数字,如果是数字,则转换为数字值并累加到sum变量中;如果是字母,则将其转换为相应的数字值(AF对应的数字为1015),再累加到sum变量中。最后,循环结束后,输出sum变量的值,即为十进制的数字。