思路:
- 下面我把相互转换的所有类型都写出来了。实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分。哦,对,自己封装了一个charToDigit函数,主要是将字符转为数字用的。
- 十六进制转十进制转八进制:

- 其他同理
代码结构图

全部代码:
1#include <iostream> 2#include <math.h> 3#include <sstream>//使用该库函数的ostringstream,将int变成string 4using namespace std; 5 6//字符转数字 7int charToDigit(char c) 8{ 9 if(c=='A') 10 return 10; 11 else if(c=='B') 12 return 11; 13 else if(c=='C') 14 return 12; 15 else if(c=='D') 16 return 13; 17 else if(c=='E') 18 return 14; 19 else if(c=='F') 20 return 15; 21 else 22 return c-'0'; 23} 24 25int jinzhi16to10(string pre) 26{ 27 int length=pre.size(); 28 int result=0; 29 for(int i=0; i<length; i++) 30 { 31 result+=((charToDigit(pre[i]))*pow(16,length-1-i)); 32 } 33 return result; 34} 35 36int jinzhi8to10(string pre) { 37 int length=pre.size(); 38 int result=0; 39 for(int i=0; i<length; i++) 40 { 41 result+=((charToDigit(pre[i]))*pow(8,length-1-i)); 42 } 43 return result; 44} 45 46int jinzhi2to10(string pre) 47{ 48 // 在此处可以添加验证是否为二进制数字的逻辑 49 int length=pre.size(); 50 int result=0; 51 for(int i=0; i<length; i++) 52 { 53 result+=((charToDigit(pre[i]))*pow(2,length-1-i)); 54 } 55 return result; 56} 57 58string jinzhi10to2(int pre) { 59 ostringstream oss; 60 while(pre!=0){ 61 oss<<pre%2; 62 pre/=2; 63 } 64 string res=oss.str(); 65 oss.str("");//清空原数据流 66 for(int i=0;i<res.length();i++){ 67 oss<<res[res.length()-i-1]; 68 } 69 return oss.str(); 70} 71string jinzhi10to8(int pre) { 72 ostringstream oss; 73 while(pre!=0){ 74 oss<<pre%8; 75 pre/=8; 76 } 77 string res=oss.str(); 78 oss.str("");//清空原数据流 79 for(int i=0;i<res.length();i++){ 80 oss<<res[res.length()-i-1]; 81 } 82 return oss.str(); 83} 84string jinzhi10to16(int pre) { 85 ostringstream oss; 86 while(pre!=0){ 87 oss<<pre%16; 88 pre/=16; 89 } 90 string res=oss.str(); 91 oss.str("");//清空原数据流 92 for(int i=0;i<res.length();i++){ 93 oss<<res[res.length()-i-1]; 94 } 95 return oss.str(); 96} 97int main() 98{ 99 /** 100 用于从控制台获取字符串A 101 int n; 102 cin>>n; 103 string *A=new string[n]; 104 for(int i=0;i<n;i++){ 105 cin>>A[i]; 106 }*/ 107 108 cout<<jinzhi10to2(jinzhi16to10("A2")); 109} 110 111 112
欢迎关注微信公众号“IT客“ ,投稿邮箱 itkeyy@163.com
