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);
}

猜你喜欢

转载自blog.csdn.net/ff_hh/article/details/82970985
今日推荐