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

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

/*
* 十六进制转换十进制
*/
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);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值