`
忧里修斯
  • 浏览: 443460 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

进制转换实例

阅读更多
#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 1
	char *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 1
	char *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;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics