0

4096 文字 (または好きなサイズ) のバッファーがある LZSS 解凍アルゴリズムの実装を行っています。この実装では、std::ofstream を使用してファイルを出力したかったので、ファイルを char* に出力しました。私はこれを機能させましたが、奇妙な/風変わりな方法で(少なくとも私にとっては)。私が知る限り、代入演算子と関係があります。すべての型が同じ (char)

持っている場合

outputFileStream.write((char *) &buffer[byteIndex1++ & 0xFFF]);
buffer[byteIndex2++ & 0xFFF] = buffer[byteIndex1 & 0xFFF];

これは失敗し、破損したデータが返されますが、これがある場合

char temporary;

buffer[byteIndex2++ & 0xFFF] = temporary = buffer[byteIndex1++ & 0xFFF];

outputFileStream.write((char *) &temporary, 1);

それはうまくいきます。行われている操作の順序を理解していませんか? (右から左への操作の実行) もしそうなら、これら 2 つのコード スニペットは同じように機能しませんか?

4

0 に答える 0