c++ - 以二进制形式读取文件,将其压缩并以二进制形式写回
问题描述
我们被分配在 C++ 中实现 Shannon Fano 压缩算法。虽然算法不是什么大问题,但我在将给定文件(txt、excel、BMP)作为二进制文件读取以进行压缩时遇到了一些麻烦。
教授。给了我们一些提示,但我不明白它们应该如何使用。他说我们应该制作一个包含文件路径的对象。然后它具有从二进制文件读取位、读取字节、读取整数和读取浮点数的方法。虽然我知道 readBin 和 readByte 做了什么,但我不明白如何使用 readInt 或 readFloat 方法(fstream 如何知道下一个 char 是 int 或 float)。
有没有人知道如何使用我上面列出的方法实现二进制读取?谢谢!
解决方案
除非您需要考虑不同文件(BMP、XLSX 等)的内部格式以提高压缩率,否则对于您的用例,我认为没有任何特别的理由将它们视为二进制流:一堆应用压缩算法的字节数。
我建议你看看这个答案,你有一个关于如何在 C++ 中读取二进制文件的非常简单的例子:https ://stackoverflow.com/a/16435334/9390121
在内存中读取文件后,只需将其压缩并将其写回磁盘(即,write()
而不是read()
)。
推荐阅读
- python - Python Patch 请求针对 SNOW 记录返回 403 状态代码
- javascript - .classList 无故应用于空对象
- c++ - VS 19 的 CMake 中标准输出目录的变量
- java - docker镜像创建自动化
- php - XMLHttpRequest -- 将参数传递给 PHP 文件
- angular - 如何在 Angular 中使用 jasmine createSpyObj 方法设置属性
- outlook - 如何使用 REST API 获取 Outlook 联系人
- reactjs - 当用户使用 react 和 typescript 拖出拖动区域时,如何正确设置拖动状态?
- apache-kafka - 无法使用 curl 从 json 配置文件中读取数据
- javascript - 连接四个游戏 - 了解数组如何始终保持相同的长度