简单的十六进制转换,用到了大小写字符转换、计算指数。
/*
* 十六进制转换十进制
*/
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);
}