天天看點

十六進制轉化 二進制 八進制 十進制

問題:實作十六進制轉化二進制 八進制 十進制;

實驗代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define max 100
void zhuanhua(char*,int);
void change_1(int);
void change_2(int);
int main(int argc, char *argv[]) {
/*十六進制轉化十進制(準備用函數實作)
個人思路:第一步:函數實作輸入的字元串轉化成數字;
第二步:将數字逆序存在數組中;
第三步:按照十六進制與十進制的轉化規則進行轉化;
第四步:輸出轉化結果*/

//整體實作了輸入十六進制 
 char ch_1[max];
 printf("請輸入十六進制的數:");
 int i,m;
 char *p; 
 scanf("%s",ch_1);
 m=strlen(ch_1); 
 //出錯原因對字元以及字元串的了解不透徹 
// for(i=0;i<max;i++){  
//  scanf("%c",&s);
//  sum++;        //統計出十六進制位數 
//  ch_1[i]=s;
//  if(s=' ')
//  break;
// } 
 printf("輸出字元串的個數:%d\n",m); 
 printf("将字元串挨個輸出:"); 
 int j;
 for(j=0;j<m;j++){
 printf("%c  ",ch_1[j]);
 }
 printf("\n");
 //第一次出原因的地方是輸入的字元串沒有按自己的設想放入到數組中;
//發現sum就沒有進行累加,一直都是1; 
 zhuanhua(ch_1,m);
 return 0;
}
void zhuanhua(char*p,int m){
 int i,j,l=0; 
 int sum=0;
 static int ch_2[max];
 for(i=m-1;i>=0;i--){
  if(*(p+i)>='1'&&*(p+i)<='9'){
   ch_2[l]=*(p+i)-'0';
  }else if(*(p+i)>='A'&&*(p+i)<='F'){
   ch_2[l]=*(p+i)-'A'+10;
  }
  l++;
 }
 printf("将字元串轉化成數字然後逆序輸出:"); 
 //轉化十進制; 
 for(j=0;j<m;j++){
  sum+=ch_2[j]*pow(16,j);
  printf("%d ",ch_2[j]);
 }
 
 printf("\n");
 printf("輸出轉化成的十進制:%d\n",sum); 
 //轉化二進制;
 printf("輸出二進制:");
 change_1(sum);
 //轉化八進制 
 printf("\n");
 printf("輸出轉化後的八進制:");
 change_2(sum);
 }
 void change_1(int n)            //用遞歸求二進制可以更深刻的了解遞歸函數; 
{
    if (n == 0)
        return;
    else
    {
        change_1(n / 2);
        printf("%d", n % 2);
    } 
}
void change_2(int n){
 if (n == 0)
        return;
    else
    {
        change_2(n / 8);
        printf("%d", n % 8);
    }
}    
           

十六進制轉化二進制方法二:

#include <stdio.h>
#include <stdlib.h>
#define M 100
//十六進制轉化二進制 
void erjin(int n);
int zhuanhua(char *m);
int main(int argc, char *argv[]) {
	char a[M];
	char *p;
	printf("請輸入一個十六進制數:"); 
	scanf("%s",a);
	int m=strlen(a);
	int i,j;
	for(i=0;i<m;i++){
		int k=zhuanhua(a+i);
		if(k>7){
			erjin(k);
		}else if(k<=7&&k>3){
			printf("0");
			erjin(k);
		}else if(k<=3&&k>=1){
			printf("0");
			printf("0");
			erjin(k);
		}else if(k==1){
			printf("0");
			printf("0");
			printf("0");
			erjin(k);
		}
		else{
			printf("0");
			printf("0");
			printf("0");
			printf("0");
		}		
	} 
	return 0;
}
int zhuanhua(char *m){
	if(*m>'0'&& *m<='9'){
		return *m-'0';
	}else{
		return *m-'A'+10;
	}
}
void erjin(int n){
	if(n==0){
		return ;
	}else{
		erjin(n/2);
		printf("%d",n%2);
	}
}
           

運作結果:

十六進制轉化 二進制 八進制 十進制