八进制整数向二进制、十进制、十六进制整数转换的C语言编程

如题所述

十进制转十六进制
#include<stdio.h>
int main()
{
int i,a,k;
char b[12];
scanf("%d",&a);
k=1;
while(a)
{
if(a%16>=10)
b[k++]='A'+a%16-10;
else b[k++]='0'+a%16;
a=a/16;
}
for(i=k-1;i>0;i--)
printf("%c",b[i]);
return 0;
}
十六进制转十进制
1. #include<stdio.h>
2. #include<string.h> 
3. #include<math.h>
4. int main()
5. { 
6.  double sum=0,x;
7.  char a[8];
8.  int len,i=0;
9.  gets(a);
10.  len=strlen(a);
11.  while(len)
12.  {
13.   if(a[len-1]>='A'&&a[len-1]<='F')
14.     x=(a[len-1]-'A'+10)*pow(16,i++);
15.   else
16.       x=(a[len-1]-'0')*pow(16,i++);
17.   sum+=x;
18.   len--;
19.  }
20.  printf("%.0lf",sum);
21.
22.  return 0;
23.  
24.  }
十六进制转八进制 
1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <string.h>
4. #define MAXSIZE 100000
5.
6. //输出
7. void Print(char *data,int n)
8. {
9.     int i;
10.     for(i=n-1;i>=0;i--)
11.     {
12.         printf("%c",data[i]);
13.     }
14.     printf("\0");
15.     printf("\n");
16. }
17.
18. //去除每个数的前缀0
19. int Trim(char *data,int n)
20. {
21.     int i;
22.     while(data[--n]=='0');
23.     return n+1;
24. }
25.
26. //初始化
27. void Init(char *data,int n)
28. {
29.     int i;
30.     for(i=0;i<n;i++) data[i]='0';
31. }
32.
33. //将十六进制转换二进制
34. int HexToBinary(char *hex,char *binary)
35. {
36.     int i;
37.     int value;
38.     int hex_n=strlen(hex);
39.     int binary_n=0;
40.     int length=4*hex_n;
41.     if(length%3==1) length+=2;
42.     else if(length%3==2) length++;
43.     Init(binary,length);
44.     for(i=hex_n-1;i>=0;i--)
45.     {
46.         int count=0;
47.         switch(hex[i])
48.         {
49.         case 'A':value=10;break;
50.         case 'B':value=11;break;
51.         case 'C':value=12;break;
52.         case 'D':value=13;break;
53.         case 'E':value=14;break;
54.         case 'F':value=15;break;
55.         default:value=hex[i]-'0';
56.         }
57.         while(value)
58.         {
59.             binary[binary_n+count]=value%2+'0';
60.             count++;
61.             value/=2;
62.         }
63.         binary_n+=4;
64.     }
65.     return length;
66. }

69. int BinaryToOctal(char *binary,int binary_n,char *octal)
70. {
71.     int i;
72.     int n=0;
73.     for(i=0;i+2<binary_n;i+=3)
74.     {
75.         octal[n++]=(binary[i]-'0')+(binary[i+1]-'0')*2+(binary[i+2]-'0')*2*2+'0';
76.     }
77.     return n;
78. }
79.
80. int main()
81. {
82.     int n;
83.     int i;
84.     char hex[MAXSIZE];      //十六进制
85.     char octal[3*MAXSIZE];  //八进制
86.     int octal_n=0;
87.     char binary[4*MAXSIZE]; //二进制
88.     int binary_n;
89.     scanf("%d",&n);
90.     getchar();
91.     for(i=0;i<n;i++)
92.     {
93.         gets(hex);
94.         binary_n=HexToBinary(hex,binary);
95.         octal_n=BinaryToOctal(binary,binary_n,octal);
96.         octal_n=Trim(octal,octal_n);
97.         Print(octal,octal_n);
98.     }
99.     return 0;
100. }
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-15
#include <stdio.h>
#include <math.h>
#include <string.h>
char hashcode[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void toBinary(int n)
{
    int s[1000],top=-1;
    if(!n)
    {
        printf("%d\n",0);
        return;
    }
    while(n)
    {
        s[++top]=n%2;
        n/=2;
    }
    while(top!=-1)
        printf("%d",s[top--]);
    printf("\n");
}

void toOctonary(int n)
{
    char s[1000];
    int top=-1;
    if(!n)
    {
        printf("%d\n",0);
        return;
    }
    while(n)
    {
        s[++top]=hashcode[n%8];
        n/=8;
    }
    while(top!=-1)
        printf("%c",s[top--]);
    printf("\n");
}

void toHex(int n)
{
    char s[1000];
    int top=-1;
    if(!n)
    {
        printf("%d\n",0);
        return;
    }
    while(n)
    {
        s[++top]=hashcode[n%16];
        n/=16;
    }
    while(top!=-1)
        printf("%c",s[top--]);
    printf("\n");
}
int main()
{
    char number[100];
    int n=0;
    unsigned int i;
    scanf("%s",number);
    for(i=0;i<strlen(number);i++)
        n+=(number[i]-'0')*pow(8,strlen(number)-i-1);
    printf("十进制:%d\n",n);
    printf("二进制:");
    toBinary(n);
    printf("八进制:");
    toOctonary(n);
    printf("十六进制:");
    toHex(n);
    return 0;
}

本回答被网友采纳
相似回答