C++實現進位制轉換工具

卡尔的思索發表於2024-06-03

下面是一個使用C++編寫的簡單數制轉換工具,該工具包含了二進位制、十進位制和十六進位制之間的轉換功能。

二進位制轉十進位制

int binaryToDecimal(const std::string& binary) {
    int decimal = 0, base = 1;
    int len = binary.length();
    for (int i = len - 1; i >= 0; --i) {
        if (binary[i] == '1') {
            decimal += base;
        }
        base *= 2;
    }
    return decimal;
}

這段程式碼透過遍歷二進位制字串,從右到左計算每個位上的值,並累加到decimal變數中。

十進位制轉二進位制

std::string decimalToBinary(int decimal) {
    std::string binary = "";
    while (decimal > 0) {
        binary = (decimal % 2 == 0 ? '0' : '1') + binary;
        decimal /= 2;
    }
    return binary;
}

該函式透過不斷除以2並取餘數,得到二進位制的每一位,直到十進位制數為0。

十進位制轉十六進位制
使用C++標準庫中的stringstream和hex運算子可以方便地實現十進位制和十六進位制之間的轉換。

std::string decimalToHexadecimal(int decimal) {
    std::stringstream ss;
    ss << std::hex << std::uppercase << decimal;
    return ss.str();
}

十六進位制轉十進位制

int hexadecimalToDecimal(const std::string& hexadecimal) {
    std::stringstream ss(hexadecimal);
    int decimal;
    ss >> std::hex >> decimal;
    return decimal;
}

主函式與使用者互動
主函式main()負責處理使用者輸入和輸出,以及呼叫上述轉換函式。使用者首先選擇一個轉換選項,然後輸入相應的數字。程式將根據使用者的選擇進行相應的數制轉換,並輸出結果。

int main() {
    int choice;
    std::string input;
    std::cout << "請輸入您的選擇:\n";  
    std::cout << "1. 二進位制轉十進位制\n";  
    std::cout << "2. 二進位制轉十六進位制\n";  
    std::cout << "3. 十進位制轉二進位制\n";  
    std::cout << "4. 十進位制轉十六進位制\n";  
    std::cout << "5. 十六進位制轉二進位制\n";  
    std::cout << "6. 十六進位制轉十進位制\n";
    std::cin >> choice;

    std::cout << "請輸入數字: ";  
    std::cin >> input;  
  
    std::transform(input.begin(), input.end(), input.begin(), ::tolower); // 轉換為小寫以進行十六進位制轉換  
  
    switch (choice) {  
        case 1: // 二進位制轉十進位制  
            std::cout << "十進位制: " << binaryToDecimal(input) << std::endl;  
            break;  
        case 2: // 二進位制轉十六進位制  
            std::cout << "十六進位制: " << decimalToHexadecimal(binaryToDecimal(input)) << std::endl;  
            break;  
        case 3: // 十進位制轉二進位制  
            std::cout << "二進位制: " << decimalToBinary(std::stoi(input)) << std::endl;  
            break;  
        case 4: // 十進位制轉十六進位制  
            std::cout << "十六進位制: " << decimalToHexadecimal(std::stoi(input)) << std::endl;  
            break;  
        case 5: // 十六進位制轉二進位制  
            std::cout << "二進位制: " << decimalToBinary(hexadecimalToDecimal(input)) << std::endl;  
            break;  
        case 6: // 十六進位制轉十進位制  
            std::cout << "十進位制: " << hexadecimalToDecimal(input) << std::endl;  
            break;  
        default:  
            std::cout << "選擇無效!" << std::endl;  
    }  
    return 0;  
}

相關文章