2

我正在尝试编写 Huffman 编码器,但遇到了一些压缩错误。我将问题确定为放入 ofstream 的字符与来自同一文件的字符 read() 之间的不匹配。

此问题的一个具体实例:

  • put() 写入 ASCII 字符 10(换行)
  • read() 读取 ASCII 字符 13(回车)

我认为读取和放置读取和写入原始数据(没有字符翻译)我不确定为什么会发生这种情况。有人可以帮我吗?

这是用于写入压缩文件的 ofstream 实例:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary||std::ios::ate);

以及用于读取相同内容的 ifstream 实例

    std::ifstream fileInput(getFileName()+".huf",std::ios::binary);

该代码在 Windows 7 上运行,程序中的所有流均以二进制模式打开。

4

3 回答 3

5

由于拼写错误,无法以二进制模式打开:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary||std::ios::ate)

应该:

std::ofstream compressedFileStream(getCompressedFileName(),std::ios::binary|std::ios::ate)
                                                                      //   ^

|,不是||

于 2012-01-08T08:40:22.787 回答
3

症状表明您正在使用文本模式创建 ofsteam,或者您正在使用以文本模式打开的文件进行创建。您需要在构建时将 ios::binary 传递给它,或者它可能在 Windows 上以文本模式运行。

添加代码后,原因证明是拼写错误;

std::ios::binary||std::ios::ate

应该

std::ios::binary|std::ios::ate
于 2012-01-08T08:33:13.487 回答
0

在 Windows 上,如果您正在写入二进制数据,则需要使用适当的属性打开文件。

同样,如果您正在读取二进制数据,则需要使用适当的属性打开文件。

于 2012-01-08T08:34:15.430 回答