十六进制转十进制问题
为啥的出的结果比正确的结果少3呢,不求甚解#include <stdio.h>
#include <math.h>
#include <string.h>
//输入十六进制数,转换成十进制
#define MAX 30
int hex(char array[]); //进制转换
int main(void)
{
char number; //存放合法的十六进制数字
printf("请输入一个十六进制数:");
scanf("%s", number);
printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));
getch();
return 0;
}
int hex(char array)
{
int i, j; //循环变量
int sum = 0; //获取最终结果
int len; //获取该数组的长度
inttemp; //获取每个字符的转换成十进制后的值
len = strlen(array);
for(i = len, j = 0; i >= 0; i--, j++)
{
if(array <= '9')
{
temp = array - '0';
}
else if(array >= 'A' && array <= 'Z')
{
temp = array - 'A' + 10;
}
else if(array >= 'a' && array <= 'z')
{
temp = array - 'a' + 10;
}
sum +=temp*(pow(16, j-1));
}
return sum;
} 嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了
另外 主函数里的getch()应该是多余的
另外建议楼主输入十六进制数以0xff这样比较规范, 传字符数组的时候只要传向后两位的指针就可以了 #include <stdio.h>
#include <math.h>
#include <string.h>
//输入十六进制数,转换成十进制
#define MAX 30
int hex(char array[]); //进制转换
int main(void)
{
char number; //存放合法的十六进制数字
printf("请输入一个十六进制数:");
scanf("%s", number);
printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));
getch();
return 0;
}
int hex(char array)
{
int i, j; //循环变量
int sum = 0; //获取最终结果
int len; //获取该数组的长度
inttemp; //获取每个字符的转换成十进制后的值
len = strlen(array);
for(i = len-1, j=0; i >= 0; i--, j++)
{
if(array <= '9')
{
temp = array - '0';
}
else if(array >= 'A' && array <= 'F')
{
temp = array - 'A' + 10;
}
else if(array >= 'a' && array <= 'f')
{
temp = array - 'a' + 10;
}
sum += temp*pow(16, j);
}
return sum;
} j从0开始循环,第50行指数为什么是j-1 楼主输入什么 少3? BngThea 发表于 2018-3-18 12:10
j从0开始循环,第50行指数为什么是j-1
俺这里不减的话会多乘一次,结果差距好大的。。{:10_266:} Dr丶温 发表于 2018-3-19 08:17
俺这里不减的话会多乘一次,结果差距好大的。。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
//输入十六进制数,转换成十进制
#define MAX 30
int hex(char array[]); //进制转换
int main(void)
{
//char number; //存放合法的十六进制数字
//printf("请输入一个十六进制数:");
//scanf("%s", number);
char number = "9FFFF";
printf("十六进制的 %s 转换成十进制为 %d \n", number, hex(number));
// getch();
return 0;
}
//int hex(char array)
//{
// int i, j; //循环变量
// int sum = 0; //获取最终结果
// int len; //获取该数组的长度
// inttemp; //获取每个字符的转换成十进制后的值
//
// len = strlen(array);
//
// for(i = len, j = 0; i >= 0; i--, j++)
// {
// if(array <= '9')
// {
// temp = array - '0';
// }
// else if(array >= 'A' && array <= 'Z')
// {
// temp = array - 'A' + 10;
// }
// else if(array >= 'a' && array <= 'z')
// {
// temp = array - 'a' + 10;
// }
//
// sum += temp * (pow(16, j - 1));
// }
//
// return sum;
//}
int hex(char array)
{
int len = strlen(array);
int sum = 0;
int temp;
for(int i = 0; i < len; ++i)
{
if(isdigit(array))
{
temp = array - '0';
}
else if(isupper(array))
{
temp = array - 'A' + 10;
}
else
{
temp = array - 'a' + 10;
}
sum = sum * 16 + temp;
}
return sum;
}
人造人 发表于 2018-3-19 12:41
真是多谢代码啦,不过感觉用自己脑洞的基础上再深入好些{:10_254:} ba21 发表于 2018-3-18 12:07
还可以酱紫改!!!!!
长知识了,谢谢哈{:10_297:} t6am3 发表于 2018-3-18 14:41
嗯嗯知道了 ,你在第50行 pow函数的返回值是double型的 你在前面加一个(int)把他转化为int型就不会出错了 ...
感谢答疑,懂了一半了。。。
页:
[1]