C++のstringstreamを使って10進数と16進数を相互変換する方法
C++では、10進数を16進数の文字列に変換したり、その逆に16進数の文字列を10進数に変換したりすることができます。この変換には、C++標準ライブラリが提供するstringstream(文字列ストリーム)機能を利用します。
stringstreamは、文字列のフォーマット、解析、数値への変換など、さまざまな用途に活用できる便利なクラスです。また、hexはI/Oマニピュレータの一種で、ストリームへの参照を引数として受け取り、操作後のストリーム参照を返します。
10進数から16進数への変換
まず、10進数の値を16進数の文字列に変換する例を見てみましょう。抽出演算子「<<」とhexマニピュレータを組み合わせることで、簡単に変換できます。
サンプルコード
#include<iostream>
#include<sstream>
using namespace std;
int main() {
int decimal = 61;
stringstream my_ss;
my_ss << hex << decimal; // 10進数を16進数として書き込む
string res = my_ss.str();
cout << "61の16進数表現: " << res << endl;
return 0;
}実行結果
61の16進数表現: 3d
この例では、抽出演算子「<<」を使って10進数の値を16進数形式でストリームに書き込み、str()メソッドで結果を文字列として取得しています。
16進数から10進数への変換
次に、逆の処理である「16進数の文字列から10進数への変換」を行う例です。挿入演算子「>>」を使って、ストリーム内の値を整数型の変数に読み込みます。
サンプルコード
#include<iostream>
#include<sstream>
using namespace std;
int main() {
string hex_str = "0x3d"; // 「0x」は付けても付けなくても可
unsigned int decimal;
stringstream my_ss;
my_ss << hex << hex_str; // 16進数の文字列をストリームに書き込む
my_ss >> decimal; // 整数として取り出す
cout << "0x3dの10進数表現: " << decimal << endl;
return 0;
}実行結果
0x3dの10進数表現: 61
まとめ
このように、stringstreamとhexマニピュレータを組み合わせれば、10進数と16進数の相互変換をシンプルなコードで実現できます。「<<」でストリームへ書き込んで文字列化すれば10進→16進、「>>」で整数型に読み込めば16進→10進の変換になります。数値と文字列の変換処理を頻繁に行う場面で、ぜひ活用してみてください。
-
C++で10進数を16進数に変換するプログラムの作り方
10進数の数値が入力として与えられたとき、その数値を16進数に変換するのが本記事の目的です。 コンピュータの世界では、16進数は基数16で表現され、10進数は基数10で表現されます。10進数は0〜9の値を使って表されるのに対し、16進数は0〜15の数字を持ちます。そのうち10は「A」、11は「B」、12は「C」、13は「D」、14は「E」、15は「F」として表されます。 10進数から16進数への変換手順 10進数を16進数に変換するには、以下の手順に従います。 まず、与えられた数値を変換先の基数で割ります。たとえば、6789を16進数に変換する場合、基数である16で6789を割り、商を求め
-
C++で2進数を10進数に変換するプログラムの作り方
2進数が入力として与えられたとき、その2進数を10進数へ変換するのが本記事のテーマです。 コンピュータにおける10進数は基数10で表現されます。一方、2進数は基数2で表現され、使用するのは0と1という2つの数字だけです。それに対して10進数では、0から9までの任意の数字を扱うことができます。 2進数を10進数に変換するには、右端の桁から順に各桁の数字を取り出し、2のべき乗(0乗から始まり、桁数-1乗まで1ずつ増加)を掛け合わせます。そして、その掛け算の結果をすべて足し合わせることで、最終的な10進数の値が求まります。 以下は、2進数を10進数に変換する流れを図で表したものです。 具体例 入