web-dev-qa-db-ja.com

16進数表現で文字列ストリームにバッファを取得します。

私が次のようなバッファを持っていた場合:

uint8_t buffer[32];

そしてそれは完全に値で満たされていたのですが、小さな値に0を埋め込んで、16進数表現で文字列ストリームに入れるにはどうすればよいですか?

私は試した:

std::stringstream ss;
for (int i = 0; i < 32; ++i)
{
    ss << std::hex << buffer[i];
}

しかし、文字列を文字列ストリームから取り出すと、問題が発生します。値が16未満のバイトは、1文字しか表せず、0が埋め込まれるようにします。

たとえば、配列のバイト1と2が{32} {4}の場合、文字列ストリームは次のようになります。

204 instead of 2004

文字列ストリームにフォーマットを適用して、何らかの方法で0パディングを追加できますか?私はsprintfでこれを行うことができることを知っていますが、ストリームはすでに多くの情報に使用されており、これを何らかの形で達成することは大きな助けになるでしょう。

std::stringstream ss;
ss << std::hex << std::setfill('0');
for (int i = 0; i < 32; ++i)
{
    ss << std::setw(2) << static_cast<unsigned>(buffer[i]);
}
44
Dean Povey

ストリーム修飾子を見てください:std::setwおよびstd::fill

6
Thomas Matthews