C++
 Computer >> コンピューター >  >> プログラミング >> C++

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進の変換になります。数値と文字列の変換処理を頻繁に行う場面で、ぜひ活用してみてください。

  1. 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を割り、商を求め

  2. 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進数に変換する流れを図で表したものです。 具体例 入