C++での10進数と16進数の変換

C++での10進数と16進数の変換

10進数を16進数に変換する方法

10進数の整数を16進数の文字列に変換する方法はいくつかあります。

std::hex を使用

C++標準ライブラリの std::hex を使用すると簡単に変換できます。

#include <iostream>

int main() {
    int decimal = 255;
    std::cout << "16進数: " << std::hex << decimal << std::endl;
    return 0;
}

このコードを実行すると、 ff が出力されます。

std::stringstream を使用

文字列として取得したい場合は std::stringstream を使います。

#include <iostream>
#include <sstream>

int main() {
    int decimal = 255;
    std::stringstream ss;
    ss << std::hex << decimal;
    std::string hex_str = ss.str();

    std::cout << "16進数: " << hex_str << std::endl;
    return 0;
}

この方法では、変換結果を文字列として取得できます。

16進数を10進数に変換する方法

16進数の文字列を10進数の整数に変換するには std::stoi を利用できます。

std::stoi を使用

#include <iostream>

int main() {
    std::string hex_str = "ff";
    int decimal = std::stoi(hex_str, nullptr, 16);

    std::cout << "10進数: " << decimal << std::endl;
    return 0;
}

このコードを実行すると、255 が出力されます。

std::stringstream を使用

std::stringstream でも変換できます。

#include <iostream>
#include <sstream>

int main() {
    std::string hex_str = "ff";
    int decimal;
    std::stringstream ss;
    ss << std::hex << hex_str;
    ss >> decimal;

    std::cout << "10進数: " << decimal << std::endl;
    return 0;
}

std::stringstreamを使った変換

std::stringstream は入力と出力の両方で利用できます。

#include <iostream>
#include <sstream>

int main() {
    int decimal = 100;
    std::stringstream ss;
    ss << std::hex << decimal;
    std::string hex_str = ss.str();

    std::cout << "16進数: " << hex_str << std::endl;

    int back_to_decimal;
    ss.clear();
    ss.str(hex_str);
    ss >> std::hex >> back_to_decimal;

    std::cout << "再変換した10進数: " << back_to_decimal << std::endl;

    return 0;
}

このコードは、10進数→16進数→10進数の変換を行います。

手動での変換アルゴリズム

ループを用いて10進数を16進数に変換することもできます。

#include <iostream>

std::string decimalToHex(int decimal) {
    std::string hex_chars = "0123456789abcdef";
    std::string result;
    
    while (decimal > 0) {
        result = hex_chars[decimal % 16] + result;
        decimal /= 16;
    }
    
    return result.empty() ? "0" : result;
}

int main() {
    int decimal = 255;
    std::cout << "16進数: " << decimalToHex(decimal) << std::endl;
    return 0;
}

このコードでは、10進数を16進数に手動で変換します。

std::bitsetを用いた応用

2進数と16進数の変換にも応用できます。

#include <iostream>
#include <bitset>
#include <sstream>

int main() {
    int decimal = 255;
    std::bitset<8> binary(decimal);

    std::stringstream ss;
    ss << std::hex << decimal;
    std::string hex_str = ss.str();

    std::cout << "2進数: " << binary << std::endl;
    std::cout << "16進数: " << hex_str << std::endl;

    return 0;
}

この方法では、10進数→2進数→16進数の変換を実装できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です