我正在执行 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);
那可行。我不了解正在发生的操作顺序吗?(从右到左执行操作)如果我是,那么这两个代码片段的工作方式是否相同?