C++ 读取二进制文件问题

C++ 读取二进制文件问题,c++,visual-c++,ifstream,C++,Visual C++,Ifstream,我一直坚持用哈夫曼算法解码。简而言之,在解压缩部分,ifstream将0x1A的值读取为-1,表示文件结束。为什么 ifstream compressed_file; buffer = compressed_file.get(); 某些操作系统(如Windows)使用Ctrl-Z(0x1A)表示文本文件的结尾 尝试以二进制模式打开: ifstream compressed_file("My_File.dat", ios::binary); compressed_file.read(buffer

我一直坚持用哈夫曼算法解码。简而言之,在解压缩部分,ifstream将0x1A的值读取为-1,表示文件结束。为什么

ifstream compressed_file;
buffer = compressed_file.get();

某些操作系统(如Windows)使用Ctrl-Z(0x1A)表示文本文件的结尾

尝试以二进制模式打开:

ifstream compressed_file("My_File.dat", ios::binary);
compressed_file.read(buffer, quantity);

二进制模式意味着不对从输入文件读取的数据应用任何翻译。

您是否以二进制模式(
std::ios::Binary
)打开了流?另外,
get()
返回
EOF
(通常为-1),您到达了文件的末尾。您可能应该共享更多的代码。显然,C++能够打开二进制文件并对哈夫曼编码数据进行解码,所以问题在于你没有与我们共享的东西。<代码> IFSt::GET < /C> >返回<代码> int <代码>,它应该与<代码> EOF()/<代码>值(通常是1)进行比较,然后转换为<代码> char < /C>。在您的代码段中,没有打开任何文件,因此无法从流中读取,它只会为您提供EOF。某些操作系统使用0x1a(Ctrl-Z)来指示文本文件的结尾。请尝试使用
ios::binary
模式打开文件。您的代码不会打开文件。实际上,只需添加“ios::binary”参数即可。谢谢!