读书人

进制变换实例

发布时间: 2012-12-27 10:17:10 作者: rapoo

进制转换实例

#include <stdio.h>#include <stdlib.h>void trans(char strnum[],int n);int strToInt(char strnum[],int hex);char *intToX(int num,int hex);int main(int argc,char argv[]){#if 1char *nump;char *p = malloc(13);nump = p;char c;int size = 0;printf("请输入你要转换的数:\n");while((c = getchar()) != '\n'){*p = c;p++;size++;}//printf("nump:%s,size:%d\n",nump,size);//转换trans(nump,size);#endif//int num = 0;//scanf("%d",&num);//printf("After:%s\n",intToX(num,2));exit(0);}/** *进制转换:将输入的字符串类型的数转换成另三种进制的数。只支持2、8、10、16三种进制的相互转换 *各进制数后面加(进制)表示,如2进制:0010(2) */void trans(char strnum[],int n){//保存进制char type[3] = {0};//保存需转换的数char num[9] = {0};int i;for(i = 0;i < n;i++){if(strnum[i] != '(')num[i] = strnum[i];else if(strnum[i] = '('){type[0] = strnum[i + 1];if(strnum[i + 2] != ')'){type[1] = strnum[i + 2];i = i + 4;}else{i = i + 3;}}}//printf("进制:%s;数:%s\n",type,num);//%s输出默认至发现'\0'结束//将字符和进制都转成10进制整数int intType = strToInt(type,10);int intNum = strToInt(num,intType);//printf("整数:num=%d,type=%d\n",intNum,intType);#if 1char *rp;if(intType == 2){printf("10进制:%d\n",intNum);rp = intToX(intNum,2);printf("2进制:%s\n",rp);rp = intToX(intNum,8);printf("8进制:%s\n",rp);rp = intToX(intNum,16);printf("16进制:%s\n",rp);}else if(intType == 8){printf("10进制:%d\n",intNum);rp = intToX(intNum,2);printf("2进制:%s\n",rp);rp = intToX(intNum,8);printf("8进制:%s\n",rp);rp = intToX(intNum,16);printf("16进制:%s\n",rp);}else if(intType == 10){printf("10进制:%d\n",intNum);rp = intToX(intNum,2);printf("2进制:%s\n",rp);rp = intToX(intNum,8);printf("8进制:%s\n",rp);rp = intToX(intNum,16);printf("16进制:%s\n",rp);}else if(intType == 16){printf("10进制:%d\n",intNum);rp = intToX(intNum,2);printf("2进制:%s\n",rp);rp = intToX(intNum,8);printf("8进制:%s\n",rp);rp = intToX(intNum,16);printf("16进制:%s\n",rp);}#endif}/* *字符转成整数 *参数:strnum,需转换的字符;hex,进制 * */int strToInt(char strnum[],int hex){int value = 0;char *p;p = strnum;while(*p != '\0'){//16进制if(hex == 16){if(*p >= '0' && *p <= '9'){value = value * hex + *p - '0';}else{value = value * hex + *p - 'a' + 10;}}else{//其他进制value = value * hex + *p - '0';}p++;}//printf("value=%d\n",value);return value;}/** *功能:将10进制数转成指定进制的数 *参数:num需转换的数;hex需转换成的进制 */char *intToX(int num,int hex){char *p = malloc(12);int size = 0;while(num){int mod = num % hex;if(mod >= 0 && mod <= 9){*p = mod + '0';}else{*p = mod + 'a' - 10;}num = num / hex;p++;size++;}//少于8位,用0补全int j;for(j = 0;j < 8 - size;j++){*p = '0';p++;}//倒序返回int i;//printf("size:%d\n",size);//printf("p:%s\n",p);char *rp = malloc(12);p--;//指针指向最后一个元素for(i = 0;i < 8;i++){*rp = *p;rp++;p--;}rp = rp - 8;//指针指向第一个元素//printf("rp:%s\n",rp);return rp;}

读书人网 >编程

热点推荐