#include <stdio.h>
#include <string.h>

int hexToDec(char hexChar) {
    if (hexChar >= '0' && hexChar <= '9') {
        return hexChar - '0';
    }
    else if (hexChar >= 'A' && hexChar <= 'F') {
        return hexChar - 'A' + 10;
    }
    else if (hexChar >= 'a' && hexChar <= 'f') {
        return hexChar - 'a' + 10;
    }
    else {
        return -1;
    }
}

int main() {
    char str[80];
    char newStr[80];
    int dec = 0;
    int index = 0;

    printf("Enter a string:");
    scanf("%s", str);

    printf("New string:");

    int len = strlen(str);
    for (int i = 0; i < len; i++) {
        int decValue = hexToDec(str[i]);
        if (decValue >= 0) {
            newStr[index] = str[i];
            printf('%c', newStr[index]);
            index++;
            dec = dec * 16 + decValue;
        }
    }
    printf("\nnumber=%d\n", dec);

    return 0;
}

代码解析:

  1. hexToDec(char hexChar) 函数:

    • 该函数用于将单个十六进制字符转换为十进制数。
    • 根据字符的值,分别处理 '0'-'9'、'A'-'F' 和 'a'-'f'。
    • 非十六进制字符返回 -1。
  2. main() 函数:

    • 声明两个字符数组 strnewStr 用于存储输入字符串和过滤后的十六进制字符串。
    • 声明 dec 变量用于存储十进制结果。
    • 声明 index 变量用于跟踪 newStr 数组的索引。
    • 使用 scanf() 函数获取用户输入的字符串。
    • 循环遍历输入字符串,使用 hexToDec() 函数判断字符是否为十六进制字符。
    • 如果是,则将字符添加到 newStr 数组并打印。
    • 同时,使用 dec = dec * 16 + decValue 累加计算十进制值。
    • 最后,输出过滤后的十六进制字符串和计算得到的十进制值。

示例:

输入:

#$Fe$3h*

输出:

New string:Fe3
number=4067

总结:

该代码实现了一个简单的十六进制转十进制的程序。它首先过滤掉输入字符串中非十六进制的字符,然后将剩下的十六进制字符串转换为十进制数。代码易于理解和修改,可以作为学习 C 语言字符串处理和进制转换的参考。


原文地址: https://www.cveoy.top/t/topic/pknB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录