-3

さまざまな 16 進語を表す文字を含むメモリ領域があります。それらを印刷するとき、すべての文字を保持したいのですが、現在のコードではゼロ以外の数字のゼロパディングが取り除かれています。たとえば、メモリ内に文字がある場合は0000出力します0000が、持っている場合は0001出力します1。私は現在stringstreamを使用していますが、文字配列を使用して文字列を作成しようとしました(コメントを参照):

stringstream ss;
char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
for (int d = 0; d < 2 * bytes_word; d++){
    ss << *(data_ptr + d);
}
data = ss.str();

//char* data_ch = new char[2 * bytes_word];
//char* data_ptr = sets[set_index]->get_block(block_index)->get_word(word_index);
//for (int d = 0; d < 2 * bytes_word; d++){
//  data_ch[d] = *(data_ptr + d);
//}
//string data(data_ch);
//delete[] data_ch;

このことから、文字列を stdout に渡すと、実際にストリッピングが行われる可能性があると考える傾向がありますcout << data;。デバッグ モードでは、両方のケースで文字列の内容がすべて 0 を含むように表示されるため、 を使用します。これがそうである場合、どうすれば解決できますか?

編集 - 解決済み 受け入れられた回答に投稿されたように、使用する必要がsetfill()ありsetw()、私は認識していませんでした。文字を指しているため、これは最初は問題を解決しdata_ptrませんでした。単にforループを取り出して使用しましたatoi(data_ptr)

4

1 に答える 1

8

使ってみて

 std::cout << std::setfill('0') << std::setw(4) << data;

乾杯!

于 2016-01-12T20:53:39.243 に答える