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進数の変換を実装できます。