十六进制字符串转十进制数的c代码

本文介绍了一个简单的C语言程序,该程序可以将用户输入的十六进制数转换为等值的十进制数。程序使用了栈来辅助处理转换过程,并能够正确处理包含小数部分的十六进制数。

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

int main()
{
 char ch;//用来接受一个输入字符
 int stack[50];//存储处理后的十六进制对应的十进制
 int top=0;//栈里面数据的个数
 int decimal=0;//小数点在输入字符串中的位置,从0号位置开始计数
 float num=0;//计算最后的十进制数

 printf("请输入十六进制(0-9,a-f,A-F):");
 while ((ch=getchar())!='/n')
 {
  if (ch>='0'&&ch<='9')
   stack[top++]=int(ch-48);
  else if (ch>='A'&&ch<='F')
   stack[top++]=int(ch-55);
  else if (ch>='a'&&ch<='f')
   stack[top++]=int(ch-87);
  else if (ch=='.')//如果是小数点
   decimal=top;//表明从decimal个数据以后的数据都是小数部分
  else {
   printf("输入了非法数据");
   return 0;
  }
 }

 while(top)
 {
  if (decimal!=0&&top>decimal)//计算小数部分
   num+=stack[--top]/pow(16,top-decimal+1);
  else
   num+=stack[--top]*pow(16,top);//计算整数部分
 }
 printf("%.4f",num);
 getchar();
 return 1;
}

 

2009年03月17日,留作纪念!

在C语言中,将十六进制字符串换为十进制整数可以通过自定义函数实现。以下是一个完整的示例代码,展示了如何将十六进制字符串换为十进制整数,并且支持可选的前缀 `0x` 或 `0X`: ```c #include <stdio.h> #include <ctype.h> // 将单个十六进制字符换为对应的十进制值 int hex_char_to_int(char c) { if (isdigit(c)) { return c - '0'; } else if (islower(c)) { return 10 + c - 'a'; } else if (isupper(c)) { return 10 + c - 'A'; } return -1; // 如果不是有效的十六进制字符,返回-1表示错误 } // 将十六进制字符串换为十进制整数 int hex_string_to_decimal(const char *str) { int result = 0; int i = 0; // 检查是否有前缀 "0x" 或 "0X" if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) { i = 2; // 跳过前缀 } // 遍历字符串中的每个字符 for (; str[i] != '\0'; i++) { int value = hex_char_to_int(str[i]); if (value == -1) { printf("无效的十六进制字符: %c\n", str[i]); return -1; // 遇到无效字符时返回错误 } result = result * 16 + value; } return result; } int main() { const char *hex_strings[] = {"0x7ff0", "0x2341", "1a3f", "ABC", "invalid"}; int count = sizeof(hex_strings) / sizeof(hex_strings[0]); for (int i = 0; i < count; i++) { int decimal_value = hex_string_to_decimal(hex_strings[i]); if (decimal_value != -1) { printf("十六进制字符串 \"%s\" 的十进制值为: %d\n", hex_strings[i], decimal_value); } else { printf("无法十六进制字符串 \"%s\"\n", hex_strings[i]); } } return 0; } ``` ### 代码说明: 1. **`hex_char_to_int` 函数**:用于将单个十六进制字符换为对应的十进制值。该函数处理数字字符(`0-9`)、小写字母(`a-f`)和大写字母(`A-F`)。 2. **`hex_string_to_decimal` 函数**:用于将整个十六进制字符串换为十进制整数。它首先检查是否有前缀 `0x` 或 `0X`,然后逐个字符处理字符串,调用 `hex_char_to_int` 函数获取每个字符的十进制值,并将其累加到结果中。 3. **`main` 函数**:测试了多个十六进制字符串换,包括有效和无效的字符串。 ### 示例输出: ``` 十六进制字符串 "0x7ff0" 的十进制值为: 32752 十六进制字符串 "0x2341" 的十进制值为: 9025 十六进制字符串 "1a3f" 的十进制值为: 6719 十六进制字符串 "ABC" 的十进制值为: 2748 无法十六进制字符串 "invalid" ``` ### 注意事项: - 该代码假设输入的字符串是合法的十六进制格式。如果遇到非法字符(如 `'g'`、`'z'` 等),程序会提示错误并返回 `-1`。 - 代码中使用了标准库函数 `isdigit`、`islower` 和 `isupper` 来简化字符类型的判断。 ### 相关问题: 1. 如何在C语言中将二进制字符串换为十进制整数? 2. C语言中如何处理带有前缀的八进制字符串换为十进制整数? 3. 如何优化十六进制字符串换为十进制整数的性能? 4. 如何在C语言中实现不区分大小写的十六进制字符串换? 5. 如何在C语言中处理包含空格或其他分隔符的十六进制字符串
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值