以二进制形式读取文件,压缩并以二进制形式写回 我们已经给出了在C++中实现Shannon Fanno压缩算法的任务。虽然算法没有太大问题,但我在将给定文件(txt、excel、BMP)作为二进制文件进行压缩时遇到了一些问题
教授给了我们一些提示,但我不知道应该如何使用它们。他说我们应该创建一个对象,该对象接受文件的路径。然后它有从二进制文件读取位、字节、整数和浮点的方法。虽然我知道readBin和readByte的作用,但我不明白如何使用readInt或readFloat方法(fstream如何知道下一个字符是int或float)以二进制形式读取文件,压缩并以二进制形式写回 我们已经给出了在C++中实现Shannon Fanno压缩算法的任务。虽然算法没有太大问题,但我在将给定文件(txt、excel、BMP)作为二进制文件进行压缩时遇到了一些问题,c++,algorithm,filereader,C++,Algorithm,Filereader,教授给了我们一些提示,但我不知道应该如何使用它们。他说我们应该创建一个对象,该对象接受文件的路径。然后它有从二进制文件读取位、字节、整数和浮点的方法。虽然我知道readBin和readByte的作用,但我不明白如何使用readInt或readFloat方法(fstream如何知道下一个字符是int或float) 有人知道如何用上面列出的方法实现二进制读取吗?谢谢 除非您需要考虑不同文件(BMP、XLSX等)的内部格式以改进压缩,否则对于您的用例,我认为没有任何特殊理由将它们视为二进制流以外的任何
有人知道如何用上面列出的方法实现二进制读取吗?谢谢 除非您需要考虑不同文件(BMP、XLSX等)的内部格式以改进压缩,否则对于您的用例,我认为没有任何特殊理由将它们视为二进制流以外的任何东西:应用压缩算法的一组字节 我建议您看看这个答案,这里有一个关于如何在C++中读取二进制文件的非常简单的示例:
一旦在内存中读取了文件,就需要压缩文件并将其写回磁盘(即
write()
而不是read()
)。除非需要考虑不同文件(BMP、XLSX等)的内部格式以改进压缩,对于您的用例,我不认为有任何特殊的理由将它们视为二进制流以外的任何东西:应用压缩算法的一组字节
我建议您看看这个答案,这里有一个关于如何在C++中读取二进制文件的非常简单的示例:
一旦在内存中读取了文件,就需要压缩文件并将其写回磁盘(即write()
而不是read()
)
虽然我知道readBin和readByte的作用,但我不明白如何使用readInt或readFloat方法(fstream如何知道下一个字符是int或float)
这个应用程序不需要这些。您只需要读入所有二进制数据,压缩它,然后写出压缩后的数据。使用“解压缩”而不是“压缩”的相同过程将反转此过程
但要回答您的问题,以下是步骤:
readInt
,您可以选择使用四个字节以big-endian格式表示有符号四字节整数字符*
readInt
,您可以选择使用四个字节以big-endian格式表示有符号四字节整数字符*
同样,您不需要为您的作业执行任何操作。不确定是否有必要不只是将整个文件读取为字节,而是需要getInt()或getFloat(),此处:
模板
T读取类型(标准::ifstream和ifile){
T结果;
ifile.read((char*)和result,sizeof(T));
返回结果;
}
示例用法:
std::ifstream ifile("file.txt", std::ios::binary);
int i = readType<int>(ifile);
std::ifstream ifile(“file.txt”,std::ios::binary);
int i=读取类型(ifile);
不确定是否需要将整个文件读取为字节,但如果需要getInt()或getFloat(),请参见:
模板
T读取类型(标准::ifstream和ifile){
T结果;
ifile.read((char*)和result,sizeof(T));
返回结果;
}
示例用法:
std::ifstream ifile("file.txt", std::ios::binary);
int i = readType<int>(ifile);
std::ifstream ifile(“file.txt”,std::ios::binary);
int i=读取类型(ifile);
也许您应该读取几个字节,并将它们解释为int
或float
?然而,解释你的任务是离题的,所以,请要求你的教授澄清。请告诉我们您的努力和遇到的困难。也许您应该读取几个字节并将它们解释为int
或float
?然而,解释你的任务是离题的,所以,请要求你的教授澄清。请告诉我们你的努力和你被困的地方。