`
忧里修斯
  • 浏览: 436239 次
  • 性别: 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;
}
分享到:
评论

相关推荐

    Javascript进制转换实例分析

    在给定的实例中,我们看到两种主要的JavaScript进制转换方法:`toString()` 和 `parseInt()`。 1. `toString()` 方法: 这个方法是JavaScript中用于将数字转换为字符串的,同时它也可以接受一个参数来指定目标进制...

    java 进制转换实例详解

    Java 进制转换实例详解 Java 进制转换实例详解是 Java 语言中的一种基础知识,涉及到数字的进制转换问题。在 Java 中,数字可以用不同的进制表示,包括二进制、八进制、十进制、十六进制等。下面将详细介绍 Java ...

    微机原理进制转换程序设计

    "微机原理进制转换程序设计" 本资源摘要信息是关于微机原理中进制转换程序设计的知识点总结。进制转换是计算机科学中一个非常重要的概念,涉及到不同数制之间的转换,如二进制、十进制、十六进制等。 1. 需求说明 ...

    C语言实现进制转换函数的实例详解

    C语言实现进制转换函数的实例详解 C语言是一种广泛使用的编程语言,它提供了强大的编程能力,包括实现进制转换函数。在本文中,我们将详细介绍C语言实现进制转换函数的实例详解,包括二进制、八进制、十六进制转换...

    javascript常见数字进制转换实例分析

    在阅读了这篇关于“javascript常见数字进制转换实例分析”的文章之后,我们可以更加清晰地认识到在JavaScript中进行数字进制转换的原理和方法。文章通过实例演示了JavaScript在处理十进制、十六进制和二进制之间的...

    C语言的各类进制转换

    三、进制转换实例 1. **十进制转其他进制**:使用`printf`函数的`%o`(八进制)、`%x`(十六进制)或`%b`(非标准,但很多编译器支持二进制)格式指定器。 ```c #include int main() { int num = 10; printf(...

    进制转换习题精选知识.pdf

    6. 进制转换实例: - 二进制101110.11转换为八进制是67.3。 - 十六进制21.04H转换为二进制是100001.00001。 - 十进制2006转换为十六进制是7D6。 7. 计算和转换: - 例如,十进制算术表达式3*512+7*64+4*8+5的...

    xxx.rar_dsp进制转换

    5. **进制转换实例**: 假设我们有一个二进制数10110,转成十进制就是 \(1*2^4 + 0*2^3 + 1*2^2 + 1*2^1 + 0*2^0 = 16 + 0 + 4 + 2 + 0 = 22\)。同样,我们可以将十进制数22转为二进制、八进制或十六进制。 6. **...

    MFC进制转换.7z

    总的来说,这个项目是一个基于MFC的进制转换应用实例,它涵盖了C++编程、MFC框架的应用、用户界面设计和交互逻辑实现等多个方面,对于提升开发者在Windows应用程序开发中的技能具有一定的价值。尽管存在UI设计上的...

    计算机中进制及进制转换PPT课件.pptx

    计算机中进制及进制转换 计算机中进制及进制转换是计算机科学的基础知识之一。了解进制和进制转换是学习计算机科学的基础,掌握了进制和进制转换,可以更好地理解计算机的工作原理和计算机科学的其他知识。 进制是...

    Labview 16进制转换为二进制

    适用于在通讯时可以用到的实例,16进制转换为二进制,已经测试OK.

    PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)

    这些函数分别用于将十进制转换为二进制、八进制、十六进制。例如,`decbin(10)`会返回二进制表示的"1010",`decoct(10)`返回八进制的"12",而`dechex(10)`返回十六进制的"A"。 对于2、8、16进制到10进制的转换,PHP...

    C#进制转换工具.zip

    本资料包“C#进制转换工具”显然提供了一些关于如何在C#中实现这一功能的实例或代码示例。 在C#中,主要通过`Convert.ToInt32`和`Convert.ToString`方法来进行进制转换。例如,如果你有一个十六进制数字(如"1A")...

    数字进制转换器v1.01

    《数字进制转换器v1.01:深入理解与应用》 数字进制转换是计算机科学中的基础知识,也是日常编程工作中不可或缺的一部分。本文将详细探讨数字进制转换器v1.01这一实用工具的功能及其背后的理论知识,旨在帮助用户更...

    日期_进制转换_时间戳

    在这个案例中,这些工具类可能包含了进制转换和日期时间处理的实用函数,便于开发者在代码中直接调用,而无需创建实例。 综上所述,这个压缩包提供了强大的功能,帮助开发人员更高效地处理日期、时间戳和进制转换,...

    易语言2-62进制转换器

    5. **应用实例**:2-62进制转换器在实际应用中的例子包括: - **加密和解密**:使用非标准进制可以增加数据的复杂性,提高安全性。 - **唯一标识符**:生成长度固定的62进制字符串作为唯一ID,可以比传统的十进制...

    C语言写的进制转换系统

    总之,“C语言写的进制转换系统”是一个体现C语言编程基础和进制转换算法的实例。通过这个项目,开发者可以深入理解数值解析、进制转换逻辑以及如何在C语言中构建用户交互界面。对于初学者来说,这是一个极好的学习...

    26进制转换.rar

    此外,这个压缩包中的"26进制转换"可能包含了一些具体的应用实例,比如使用26进制编码字符串,或者在某种算法中作为中间步骤。如果涉及到加密,26进制可以提供一种简单的混淆手段,使得原始数据不易被直接识别。 总...

Global site tag (gtag.js) - Google Analytics