您的位置:

C++进制转换详解

一、16进制转换

在C++中,可以使用格式化输出函数“printf”将十进制数以16进制的形式输出。如:

#include 
int main(){
    int n = 255;
    printf("%x", n); //输出ff
    return 0;
}

  

而将16进制数转换为10进制数,则可以使用数学运算,如:

#include 
#include 
   
using namespace std;
int hexToDec(string hex){ //hex为十六进制数字符串
    int dec = 0;
    int len = hex.size();
    for(int i = 0; i < len; i++){
        int temp = 0;
        if(hex[i] >= '0' && hex[i] <= '9'){
            temp = hex[i] - '0';
        }else if(hex[i] >= 'A' && hex[i] <= 'F'){
            temp = hex[i] - 'A' + 10;
        }else if(hex[i] >= 'a' && hex[i] <= 'f'){
            temp = hex[i] - 'a' + 10;
        }
        dec += temp * pow(16, len - i - 1);
    }
    return dec;
}
int main(){
    string hex = "ff";
    cout << hexToDec(hex); //输出255
    return 0;
}

   
  

二、C语言进制转换规则

C语言中,数字的字面量可以表示为以下形式:

整型字面量:十进制、八进制(以0开头)、十六进制(以0x或0X开头)

浮点型字面量:十进制、科学计数法(e或E表示乘以10的几次方)

字符型字面量:单引号括起来的字符

三、C进制转换函数

C语言中,可以使用“atoi”、“atof”、“strtod”等函数来进行进制转换。

例如:

#include 
#include 
   
int main(){
    char* str1 = "11";
    printf("%d", atoi(str1)); //输出11
    char* str2 = "11.22";
    printf("%f", atof(str2)); //输出11.220000
    char* str3 = "11.22";
    printf("%f", strtod(str3, NULL)); //输出11.220000
    return 0;
}

   
  

四、C进制转换代码

以下代码实现将一个10进制数转换为另一种进制数:

#include 
using namespace std;
int main(){
    int n = 255;
    int base = 16;
    string res = "";
    while(n > 0){
        int temp = n % base;
        if(temp >= 10) res = char(temp - 10 + 'A') + res;
        else res = char(temp + '0') + res;
        n /= base;
    } 
    cout << res; //输出FF
    return 0;
}

  

五、进制转换器C

以下是一个基于C++开发的简易进制转换器:

#include 
#include 
   
using namespace std;
int decToAny(int n, int base){
    string res = "";
    while(n > 0){
        int temp = n % base;
        if(temp >= 10) res = char(temp - 10 + 'A') + res;
        else res = char(temp + '0') + res;
        n /= base;
    } 
    cout << res; 
    return 0;
}
int anyToDec(string any, int base){
    int dec = 0;
    int len = any.size();
    for(int i = 0; i < len; i++){
        int temp = 0;
        if(any[i] >= '0' && any[i] <= '9'){
            temp = any[i] - '0';
        }else if(any[i] >= 'A' && any[i] <= 'F'){
            temp = any[i] - 'A' + 10;
        }else if(any[i] >= 'a' && any[i] <= 'f'){
            temp = any[i] - 'a' + 10;
        }
        dec += temp * pow(base, len - i - 1);
    }
    return dec;
}
int main(){
    int op = 0;
    while(true){
        cout << "请选择转换方式:" << endl;
        cout << "1. 10进制转x进制" << endl;
        cout << "2. x进制转10进制" << endl;
        cin >> op;
        if(op == 1){
            int n = 0, base = 0;
            cout << "请输入需要转换的十进制数:" << endl;
            cin >> n;
            cout << "请输入需要转换的进制数(2~16):" << endl;
            cin >> base;
            if(base >= 2 && base <= 16){
                cout << "转换结果为:" << endl;
                decToAny(n, base);
                break;
            }
        }else if(op == 2){
            string any = "";
            int base = 0;
            cout << "请输入需要转换的数字:" << endl;
            cin >> any;
            cout << "请输入该数字的进制(2~16):" << endl;
            cin >> base;
            if(base >= 2 && base <= 16){
                cout << "转换结果为:" << endl;
                cout << anyToDec(any, base);
                break;
            }
        }
    }
    return 0;
}