十六进制转八进制

Posted hcd-dyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六进制转八进制相关的知识,希望对你有一定的参考价值。

 1 #include <iostream>  
 2 #include <string>  
 3 using namespace std;  
 4   
 5 int main()  
 6 {  
 7     int n;  
 8     cin>>n;  
 9     for(int k=1;k<=n;k++)  
10     {  
11         string s1,s2;//s1为输入的原始的十六进制串,s2为转化成的二进制串  
12         cin>>s1;  
13         s2="";//初始化  
14         for(int i=0;i<s1.length();i++)//遍历,字符串上加上每一位  
15         {  
16             switch(s1[i])  
17             {  
18                 case 0:s2+="0000";break;  
19                 case 1:s2+="0001";break;  
20                 case 2:s2+="0010";break;  
21                 case 3:s2+="0011";break;  
22                 case 4:s2+="0100";break;  
23                 case 5:s2+="0101";break;  
24                 case 6:s2+="0110";break;  
25                 case 7:s2+="0111";break;  
26                 case 8:s2+="1000";break;  
27                 case 9:s2+="1001";break;  
28                 case A:s2+="1010";break;  
29                 case B:s2+="1011";break;  
30                 case C:s2+="1100";break;  
31                 case D:s2+="1101";break;  
32                 case E:s2+="1110";break;  
33                 case F:s2+="1111";break;  
34                 default:break;  
35             }  
36         }  
37         int len=s2.length();  
38   
39         if(len%3==1)//三个二进制为一位八进制,二进制串前面补0,确保二进制串的长度为3的倍数  
40             s2="00"+s2;  
41         else if(len%3==2)  
42             s2="0"+s2;  
43         int flag=0;  
44         for(int i=0;i<=s2.length()-3;i+=3)  
45         {  
46             int num=4*(s2[i]-0)+2*(s2[i+1]-0)+(s2[i+2]-0);  
47             if(num)  
48                 flag=1;//忽略前导0  
49             if(flag)  
50                 cout<<num;  
51         }  
52         cout<<endl;  
53     }  
54     return 0;  
55 }  

这道题的精髓就在于通过二进制做桥梁,这样可以减少时间。

以上是关于十六进制转八进制的主要内容,如果未能解决你的问题,请参考以下文章

粉红色十进制RGB代码和十六进制RGB代码

求一个10进制转十六进制的vb代码,要支持非常大的数的(30位)

求十进制转换二进制C语言代码

android 常用的代码

python十进制转二进制代码

16进制转10进制编程