C++ 進制轉換 十進制十六進制八進制二進制相互轉換


思路:

  1. 下面我把相互轉換的所有類型都寫出來了。實際上都是通過十進制中轉的,這樣比較簡單,寫出X進制轉成十進制和從十進制轉成X進制的兩份代碼直接拷貝就完成了剩余的部分。哦,對,自己封裝了一個charToDigit函數,主要是將字符轉為數字用的。
  2. 十六進制轉十進制轉八進制:
  3. 其他同理

代碼結構圖

全部代碼:

#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM