C语言简单实现进制互相转换

/*
	日期:2012年11月11日

	时间:01:35

    作者:android88@qq.com

	博客:http://blog.csdn.net/java886o

    目的:测试printf()以及scanf()的用法
	
	功能:进制转换工具类,实现10进制8进制16进制2进制之间的转换

 */

#include <stdio.h>
#include <stdlib.h>

void main()
{
	rescanf:
	
	system("cls");	

	char result[128];   //存储转换后的结果

	printf("			欢迎使用进制转换工具\n\n");
	printf("			[1]		 10------>------2\n");
	printf("			[2]		 10------>------8\n");
	printf("			[3]		 10------>------16\n");
	printf("			[4]		 16------>------2\n");
	printf("			[5]		 16------>------8\n");
	printf("			[6]		 16------>------10\n");
	printf("			[7]		  8------>------2\n");
	printf("			[8]		  8------>------10\n");
	printf("			[9]		  8------>------16\n");

	int type,scanNumber;
	
	printf("\n			请输入序号:");
	scanf("%d",&type);
	
	switch(type) {
		case 1:
			printf("\n			【10进制转2进制】:");
			scanf("%d",&scanNumber);
			itoa(scanNumber,result,2);
			printf("\n			【结果】【%s】",result);
			break;
		case 2:
			printf("\n			【10进制转8进制】:");
			scanf("%d",&scanNumber);
			itoa(scanNumber,result,8);
			printf("\n			【结果】【%s】",result);
			break;
		case 3:
			printf("\n			【10进制转16进制】:");
			scanf("%d",&scanNumber);
			itoa(scanNumber,result,16);
			printf("\n			【结果】【0x%s】",result);
			break;
		case 4:
			printf("\n			【16进制转2进制】:");
			scanf("%x",&scanNumber);
			itoa(scanNumber,result,2);
			printf("\n			【结果】【%s】",result);
			break;
		case 5:
			printf("\n			【16进制转8进制】:");
			scanf("%x",&scanNumber);
			itoa(scanNumber,result,8);
			printf("\n			【结果】【%s】",result);
			break;
		case 6:
			printf("\n			【16进制转10进制】:");
			scanf("%x",&scanNumber);
			itoa(scanNumber,result,10);
			printf("\n			【结果】【%s】",result);
			break;
		case 7:
			printf("\n			【8进制转2进制】:");
			scanf("%o",&scanNumber);
			itoa(scanNumber,result,2);
			printf("\n			【结果】【%s】",result);
			break;
		case 8:
			printf("\n			【8进制转10进制】:");
			scanf("%o",&scanNumber);
			itoa(scanNumber,result,10);
			printf("\n			【结果】【%s】",result);
			break;
		case 9:
			printf("\n			【8进制转16进制】请输入需要转换的数:");
			scanf("%o",&scanNumber);
			itoa(scanNumber,result,16);
			printf("\n			【结果】【0x%s】",result);
			break;
		default:
			goto rescanf;
			break;
	}
	
	printf("\n\n\n");
	
	system("pause");

	goto rescanf;


}

好的,以下是一个实现任意进制之间互相转换的例子: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> // 将一个任意进制转换为十进制数 int anyBaseToDecimal(char* num, int base) { int result = 0; int i = 0; int len = strlen(num); // 按权展开法 for (i = 0; i < len; i++) { int digit; if (num[i] >= '0' && num[i] <= '9') { digit = num[i] - '0'; } else if (num[i] >= 'A' && num[i] <= 'Z') { digit = num[i] - 'A' + 10; // A~Z表示的数字 } else { printf("Invalid input!\n"); // 非法输入 return 0; } result = result * base + digit; } return result; } // 将一个十进制转换为任意进制数 char* decimalToAnyBase(int num, int base) { int quotient = num; int remainder; char* result = (char*) malloc(32 * sizeof(char)); // 分配足够的内存空间,最多支持32位进制数 char* buffer = (char*) malloc(32 * sizeof(char)); int i = 0; // 除基取余法 while (quotient != 0) { remainder = quotient % base; quotient = quotient / base; if (remainder < 10) { buffer[i++] = remainder + '0'; } else { buffer[i++] = remainder - 10 + 'A'; // 大于等于10时,使用A~Z表示 } } int j = 0; // 反转字符串 for (j = 0; j < i; j++) { result[j] = buffer[i-j-1]; } result[j] = '\0'; // 字符串结尾需要加上'\0' free(buffer); // 释放内存空间 return result; } // 将一个任意进制转换为另一个任意进制数 char* anyBaseToAnyBase(char* num, int from, int to) { int decimal = anyBaseToDecimal(num, from); // 先将任意进制转换为十进制数 char* result = decimalToAnyBase(decimal, to); // 再将十进制转换为目标进制数 return result; } int main() { char* num = "12345"; int from = 10; // 数字是10进制 int to = 16; // 转换为16进制 char* result = anyBaseToAnyBase(num, from, to); printf("%s in base %d: %s in base %d\n", num, from, result, to); free(result); // 释放内存空间 return 0; } ``` 以上代码可以将一个任意进制转换为另一个任意进制数。你可以根据自己的需要来修改进制数和测试数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java886o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值