实现十六进制间的任意转换

来源:互联网 发布:一体化大数据宣传片 编辑:程序博客网 时间:2024/06/05 03:21

一、十六进制间的任意转换:

我主要的思路分两个步骤:

1、把x进制数转换成十进制数

2、再把该十进制数转换成我们需要得到的m进制数


二、代码(func.c、func.h、main.c)

1、func.c

#include "func.h"/*十进制转m进制*/int decim(int n, int m, int buf[]){int s;bzero(buf, sizeof(buf));s=0;while(n>=m){buf[s++] = (n - (n/m)*m);n /= m;}buf[s]=n;return s+1;}/*m进制转十进制*/int C_decim(char n[], int m){int i,j,len,s,flag,num;s=0;flag=0;len=strlen(n);for(i=len-1; i>=0; i--){num = 1;for(j=0; j<flag; j++){num *= m;}if((n[i] >= '0') && (n[i] <= '9')){s += ((n[i]-'0')*num);}else if((n[i] >= 'a') && (n[i] <= 'f')){s += ((n[i]-'a'+10)*num);}else if((n[i] >= 'A') && (n[i] <= 'F')){s += ((n[i]-'A'+10)*num);}flag++;}return s;}char str1[16]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};char str2[16]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};/*判断数据的正确与否*/int judge(int x, int m, char n[]){int i,len;if(x<2 || m<2 || x>16 ||m>16){return -1;}len=strlen(n);for(i=0; i<len; i++){if(m > 9){if('0' > n[i] || n[i] > ('a'+m-10) || (n[i] > '9' && n[i] < 'A') || \ (n[i] > ('A'+m-10)&&(n[i] < 'a'))){return -1;}}else{if('0' > n[i] || ('0'+m) <= n[i] ){return -1;}}}return 0;}

2、func.h

#include <stdio.h>#include <string.h>/*十进制转m进制*/int decim(int , int , int *);/*m进制转十进制*/int C_decim(char * , int );int judge(int , int , char *);

3、main.c

#include "func.h"char str[16]={'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};int main(void){int i ,temp ,k ,x ,m ,buf[64];char n[64];while(1){bzero(n, sizeof(n));printf("\n十六进制间的任意转换(USAGE:x n m)\nx:输入的为几进制数;n:输入的数;m:将要转换成几进制数\n>>>>>>输入小于2的数退出<<<<<<\n");scanf("%d", &x);if(x < 2){return 0;}scanf("%s", n);scanf("%d", &m);/*判断输入数据的正确与否*/if(-1 == judge(x, m, n)){printf("input error!\n");continue;}/*转换成十进制*/temp=C_decim(n, x);/*转换成需要的进制*/k=decim(temp, m, buf);printf("%d进制数%s转换成%d进制数的结果: ", x, n, m);for(i=k-1; i>=0; i--){printf("%c", str[buf[i]]);}printf("\n\n");}return 0;}


原创粉丝点击