C++ で文字列を 16 進数に変換する
-
C++ で文字列を 16 進数に変換するには
std::cout
とstd::hex
を使用する -
std::stringstream
とstd::hex
を用いて、C++ で文字列を 16 進数値に変換する
この記事では、C++ で文字列を 16 進数に変換する方法について、複数の方法を紹介します。
C++ で文字列を 16 進数に変換するには std::cout
と std::hex
を使用する
16 進数表記は、プログラムファイル、エンコードされたフォーマット、または単なるテキストを表すバイナリファイルを読み取るための一般的なフォーマットです。したがって、ファイルの内容を 16 進数データで生成し、必要に応じて出力する必要があります。
この例では、格納されている string
オブジェクトを 16 進数でコンソールに出力します。C++ には、ストリームデータの数値ベースを変更できる I/O マニピュレータ std::hex
が用意されていることに注意してほしい。string
オブジェクトは 1つの文字として分解された後、std::hex
でそれぞれの 16 進数表現に変更されなければならません。範囲ベースのループを実装して、string
の文字を繰り返し処理し、変更されたデータを cout
ストリームにリダイレクトします。
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
using std::cout;
using std::endl;
using std::hex;
using std::string;
using std::stringstream;
int main() {
string s1 = "This will be converted to hexadecimal";
string s2;
cout << "string: " << s1 << endl;
cout << "hexval: ";
for (const auto &item : s1) {
cout << hex << int(item);
}
cout << endl;
return EXIT_SUCCESS;
}
出力:
string: This will be converted to hexadecimal
hexval: 546869732077696c6c20626520636f6e76657274656420746f2068657861646563696d616c
std::stringstream
と std::hex
を用いて、C++ で文字列を 16 進数値に変換する
これまでの方法では、16 進数データをオブジェクトに格納する機能が欠けていました。この問題を解決するには、stringstream
オブジェクトを作成し、そこに string
文字の 16 進数値を反復処理を用いて挿入することです。データが stringstream
に入ると、変更された文字データを格納するための新しい string
オブジェクトを構築することができます。
データは stringstream
オブジェクトから直接出力することもできるが、以下のコード例では、よりシンプルな形式である cout << string
を採用しています。別の最終用途として、標準ライブラリのファイルシステムユーティリティを使って、16 進数データを直接ファイルに書き込むこともできます。
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
using std::cout;
using std::endl;
using std::hex;
using std::string;
using std::stringstream;
int main() {
string s1 = "This will be converted to hexadecimal";
string s2;
stringstream ss;
cout << "string: " << s1 << endl;
for (const auto &item : s1) {
ss << hex << int(item);
}
s2 = ss.str();
cout << "hexval: " << s2 << endl;
return EXIT_SUCCESS;
}
出力:
string: This will be converted to hexadecimal
hexval: 546869732077696c6c20626520636f6e76657274656420746f2068657861646563696d616c