C语言十六进制字符串转换十进制

本文详细介绍了如何将十六进制数转换为十进制数的算法实现,包括字符转换、指数计算等关键步骤,适用于初学者理解十六进制与十进制之间的转换原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的十六进制转换,用到了大小写字符转换、计算指数。

/*
* 十六进制转换十进制
*/
void htoi(char s[]);
void practice2_3();
void main()
{
	practice2_3();
}

void htoi(char s[]){
	int totalNum = 0;
	int c;
	int position = 0;
	int lastChar;
	c = s[position];
	if (s[0] == '0' && s[1] == 'x' || s[1] == 'X') {
		while (c != '\0' && c > 0) {
			position ++;
			c = s[position];
		}
		position --;
		for (c = s[position]; position > 1; position --) {
			int num;
			// 小写转大写
			if (c >= 'a' && c <= 'z') {
				c -= 'a' - 'A';
			}
			// 大写A~F转换成10-15,数字字符转数字0-9
			if (c >= 'A' && c <= 'F') {
				num = c - 'A' + 10;
			} else {
				num = c - '0';
			}
			if (position > 2) {
				int exponent = position - 2; // 指数
				int exponentNum = 1; // 十六进制对应指数结果值
				for (; exponent > 0; exponent--)
				{
					exponentNum *= 16;
				}
				num *= exponentNum; // 计算当前位置对应的结果值
			}
			totalNum += num;
		}
		printf("\n十六进制转换十进制\t%6d", totalNum);
	} else {
		printf("\n字符串不符合十六进制格式");
	}
	
	printf("\n打印结束");
}

void practice2_3() {
	printf("录入合法的十六进制的字符串,将帮您转换成对应的十进制数\n");
	int c;
	char ch [500];
	int position = 0;
	while ((c = getchar()) != EOF && c != '\n' && c != '\t' && c != ' ') {
		ch[position] = c;
		position ++;
	}
	htoi(ch);
}

 

在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语言中处理包含空格或其他分隔符的十六进制字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值