私が次のようなバッファを持っていた場合:
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]);
}
ストリーム修飾子を見てください:std::setw
およびstd::fill
。