思路:
- 下面我把相互轉換的所有類型都寫出來了。實際上都是通過十進制中轉的,這樣比較簡單,寫出X進制轉成十進制和從十進制轉成X進制的兩份代碼直接拷貝就完成了剩余的部分。哦,對,自己封裝了一個charToDigit函數,主要是將字符轉為數字用的。
- 十六進制轉十進制轉八進制:
- 其他同理
代碼結構圖
全部代碼:
#include <iostream>
#include <math.h>
#include <sstream>//使用該庫函數的ostringstream,將int變成string
using namespace std;
//字符轉數字
int charToDigit(char c)
{
if(c=='A')
return 10;
else if(c=='B')
return 11;
else if(c=='C')
return 12;
else if(c=='D')
return 13;
else if(c=='E')
return 14;
else if(c=='F')
return 15;
else
return c-'0';
}
int jinzhi16to10(string pre)
{
int length=pre.size();
int result=0;
for(int i=0; i<length; i++)
{
result+=((charToDigit(pre[i]))*pow(16,length-1-i));
}
return result;
}
int jinzhi8to10(string pre) {
int length=pre.size();
int result=0;
for(int i=0; i<length; i++)
{
result+=((charToDigit(pre[i]))*pow(8,length-1-i));
}
return result;
}
int jinzhi2to10(string pre)
{
// 在此處可以添加驗證是否為二進制數字的邏輯
int length=pre.size();
int result=0;
for(int i=0; i<length; i++)
{
result+=((charToDigit(pre[i]))*pow(2,length-1-i));
}
return result;
}
string jinzhi10to2(int pre) {
ostringstream oss;
while(pre!=0){
oss<<pre%2;
pre/=2;
}
string res=oss.str();
oss.str("");//清空原數據流
for(int i=0;i<res.length();i++){
oss<<res[res.length()-i-1];
}
return oss.str();
}
string jinzhi10to8(int pre) {
ostringstream oss;
while(pre!=0){
oss<<pre%8;
pre/=8;
}
string res=oss.str();
oss.str("");//清空原數據流
for(int i=0;i<res.length();i++){
oss<<res[res.length()-i-1];
}
return oss.str();
}
string jinzhi10to16(int pre) {
ostringstream oss;
while(pre!=0){
oss<<pre%16;
pre/=16;
}
string res=oss.str();
oss.str("");//清空原數據流
for(int i=0;i<res.length();i++){
oss<<res[res.length()-i-1];
}
return oss.str();
}
int main()
{
/**
用於從控制台獲取字符串A
int n;
cin>>n;
string *A=new string[n];
for(int i=0;i<n;i++){
cin>>A[i];
}*/
cout<<jinzhi10to2(jinzhi16to10("A2"));
}
歡迎關注微信公眾號“IT客“ ,投稿郵箱 itkeyy@163.com