权值法十六进制转换十进制求和c语言代码
时间: 2025-05-26 11:24:20 浏览: 30
### 十六进制转十进制的权值法及C语言实现
#### 一、十六进制转十进制的基本原理:
在计算机科学中,我们经常需要将不同进制之间的数值相互转换。从十六进制到十进制的转换可以通过“按位加权”的方式进行计算。
例如:对于一个16进制数 `0x3A` ,可以分解为:
```
(3 * 16^1) + (10 * 16^0)
=48+10
=58
```
即先确定每一位数字所代表的实际意义(权重),然后累加起来得到最终结果。
#### 二、基于此思想下的C语言代码示例:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int hex_to_decimal(const char* str){
int len = strlen(str); //获取字符串长度
int decimalValue = 0;
for(int i = 0 ;i<len;i++){
if(isdigit(str[i])){
decimalValue += ((str[i]-'0')*(pow(16,len-i-1)));
} else {
switch(toupper(str[i])){
case 'A':decimalValue+=((10)*pow(16,(len-i-1)));break;
case 'B':decimalValue+=((11)*pow(16,(len-i-1)));break;
case 'C':decimalValue+=((12)*pow(16,(len-i-1)));break;
case 'D':decimalValue+=((13)*pow(16,(len-i-1)));break;
case 'E':decimalValue+=((14)*pow(16,(len-i-1)));break;
case 'F':decimalValue+=((15)*pow(16,(len-i-1)));break;
default : printf("Invalid character in input string\n"); return -1;break;
}
}
}
return decimalValue;
}
int main(){
const char *hexString="3A";
int decVal = hex_to_decimal(hexString);
if(decVal!=-1){
printf("The equivalent Decimal Value is %d",decVal);
}else{
printf("Error converting Hex to Dec");
}
}
```
以上程序实现了简单的字符数组形式输入的十六进制串到其对应整型十进制值得转化过程,并输出了该十进制的结果。
注意,在实际应用过程中我们需要考虑到更多的边界情况如空格处理等,这里为了简化只展示了最基础的功能模块。
#### 使用说明:
1. 将上述代码复制粘贴至任意支持标准C语法环境当中;
2. 修改变量`const char *hexString="XX"` 中间的"XX"为你想要测试的具体十六进制字符串内容即可运行查看效果;
阅读全文
相关推荐


















