8

C++ を使用して符号なし文字の配列を出力してofstream fout("filename"); いますが、間に偽の文字が生成されます。これは、問題を引き起こすコードの一部です。

for(int i = 0; i < 12; i++)
fout << DChuffTable[i];

これは配列の定義です:

unsigned char DChuffTable[12] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B};

0x0D出力ファイルでは、 と の間0x09にスプリアスが表示され0x0Aます。印刷される直前にデバッグモードで配列をチェックしましたが、変更されていません。この問題についてどう思うか教えてください。

4

1 に答える 1

21

ストリームはテキスト モードで開いています。0x0Aはライン フィード (LF) 文字であるため、ストリームによって0x0D 0x0ACR/LF に変換されます。

バイナリ モードでストリームを開きます。

std::ofstream fout("filename", std::ios_base::out | std::ios_base::binary);

その場合、行末変換は実行されません。

テキストモードの場合、ストリームはフラッシングに関して奇妙になる可能性があるため、これは通常、とにかく良い考えと見なされます。

于 2011-03-02T21:12:05.980 に答える