これを見て、私の状況では動作しません。私の状況を満足させるためにこれらの回答を得ることができないので、これを複製としてマークしないでください。GCCを使用してC++で16進数のストリームを出力するために4.2.1
私はいくつかのメモリを作成し、そのメモリにデータをコピーしています。私は、それぞれのバイトの値を16進数で0xFF
という形式で出力したいと考えています。ここで、1バイトは255
です。
私はchar*
としてメモリに私のvoid*
ポインタをキャストしていると、メモリのブロックを反復していますが、私は試してみて、値をプリントアウトするとき、私は私がunsigned int
の全幅を得る非常に広い出力の代わりに、2桁を取得します。
std::ostream& operator << (std::ostream &os, const Binary &obj)
{
char* aschar = (char*) obj.buffer;
for (long i = 0; i < obj.size; i++)
{
if (isprint(aschar[i]))
{
os << aschar[i];
}
else
{
os << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned int> (aschar[i]);
}
}
return os;
}
私は私のテストケースに128
へのすべてのバイトをINGのmemset
ています。そして私が返すものはffffff80
です。私が期待しているのは80
です。私はそれがキャスティングと何か関係があると確信していますが、私はそれを表現する方法を理解できません。
私もsprintf
を使用しようとしましたが、私はそれが私が望むように振舞うことができません。私が問題であれば、GCC 4.2.1でXcode 3.2.5 64ビットを使用しています。