这两天做题遇见了进制转换的问题,在网上看了他人的想法后自己的一些实践:
目录
关于进制转换的问题和思考
(1)高于十进制的数据转换成十进制的时候会设计字母转换数据的问题,则我们可以借助ascll码进行转换
(2)高于十进制的数据转换时要涉及依次识别数据将数字和字母分情况进行转换
1.将十进制以下的数据转换为十进制
#include <stdio.h> #include <math.h> #include <string.h> int lessten_ten(int before,int num) //转换十进制以下的到十进制 { int i; //定义循环变量 double result = 0; for (i = 0; num!=0; i++) //倒向循环便利于进行十进制的换算 { //下面调用了math头文件中的函数,pow用来计算x的y幂次-->pow(double x,double y) result +=(num % before) * pow((double)10, (double)i); //把数据转换成十进制 num = num / before; } return (int)result; }
这里在进行转换时利用了pow函数,这个函数来自于头文件math.h中,主要用来计算的是x的y幂次的结果,且要求x和y都为double类型,如果前面设置为int要进行强转换,否则运行时会报错
2.将十进制的数据转换为十进制以上
char * ten_moreten(int after, int num) //十进制转换十进制以上 { int i = 0; int j = 0; int tmp = 0; //存储余数 char tmp_array[] = "\0"; //转换后的数组 char* array[100]; for (i = 0; num > 0; i++) { tmp = num % after; if (tmp < 10) tmp_array[i] = tmp + '0'; else tmp_array[i] = tmp + 'A' - 10; //把余数大于9的转换成字母 num = num / after; //让余数继续循环 } for (j = 0; i > 0; i--, j++) //实现数组元素的倒置输出 { array[j] = tmp_array[i - 1]; array[j + 1] = '\0'; } return array; }
十进制以上的数据进行转换时问题在于如何把9以上的数据转换成字母,这里运用了ascll码值进行转换,通过数据的运算最后可以把两位数转换成字母,随后产生的数据是一个倒置的数据,又需要用循环结构把临时数组里面的数据倒置过来赋予真正输出的数组,最后返回数组的地址即可
3.十六进制转换成十进制
double sixteen_ten(char arr[]) { int lenth = (int)strlen(arr); double result=0; int i; for (i = lenth-1; i >=0; i--) { if ('A' <= arr[i] && arr[i] <= 'Z') result = result + pow(16, lenth - i - 1) * (arr[i] - 55); else if('0' <= arr[i] && arr[i] <= '9') result = result + pow(16, lenth-i-1) * (arr[i]-48); } return result; }
这里只列举出了十六进制的转换方式,其他方式和十六进制的转换方式基本相同,利用循环结构依次识别判断包含十六进制的数组中各个元素所包含的数据是数字还是字母,如果是字母也是利用ascll码值进行一个转换,最后用pow函数可以计算出十进制的数字
最终函数根据所需的环境进行函数的引用即可