返回首页 C++ 模板

进制转换模板

二进制、八进制、十进制、十六进制之间的互相转换

进制转换 二进制 八进制 十六进制 GESP3
#include <bits/stdc++.h>
using namespace std;

int main() {
    // ====== 1. 任意进制 → 十进制 ======
    // 手动:按位权展开
    // 二进制 1101 → 1×8+1×4+0×2+1×1 = 13
    string bin = "1101";
    int dec = stoi(bin, nullptr, 2);  // 13
    cout << dec << endl;

    // ====== 2. 十进制 → 任意进制 ======
    // 手动:短除法
    int n = 13;
    // 转 2 进制
    string result;
    while (n > 0) {
        result = char('0' + n % 2) + result;
        n /= 2;
    }
    cout << result << endl;  // 1101

    // ====== 3. C++ 格式化输出 ======
    n = 255;
    cout << oct << n << endl;    // 377 (8进制)
    cout << dec << n << endl;    // 255 (10进制)
    cout << hex << n << endl;    // ff  (16进制)

    // ====== 4. bitset 查看二进制 ======
    cout << bitset<8>(13) << endl;   // 00001101
    cout << bitset<16>(13) << endl;  // 0000000000001101

    // ====== 5. 通用进制转换函数 ======
    // 十进制转 k 进制
    auto toBase = [](int num, int base) -> string {
        if (num == 0) return "0";
        string res;
        while (num > 0) {
            int r = num % base;
            res = (char)(r < 10 ? '0' + r : 'A' + r - 10) + res;
            num /= base;
        }
        return res;
    };
    cout << toBase(255, 16) << endl;  // FF
    cout << toBase(13, 2) << endl;    // 1101

    return 0;
}

📖 要点说明

⚠️ 常见错误