我正在进行LZSS解压缩算法的实现,其中有一个4096个字符的缓冲区(或者你喜欢的任何大小)。此实现将文件输出到char *,因为我想使用std :: ofstream输出文件。我确实让它工作,但是以一种奇怪/古怪的方式(至少对我而言)。它与我所知道的分配算子有关。所有类型都相同(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);
这将有效。我不理解正在发生的操作顺序吗? (从右到左执行操作)如果我那么这两个代码片段是否会起作用呢?