2011-01-29 6 views
1

これを見て、私の状況では動作しません。私の状況を満足させるためにこれらの回答を得ることができないので、これを複製としてマークしないでください。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ビットを使用しています。

答えて

1

unsigned char *aschar(符号付き)の代わりにchar *ascharを使用してください。

関連する問題