我正在写一个Huffman文件,我在那里将规范代码的代码长度存储在文件的标题中.在解码过程中,我能够重新生成规范代码并将它们存储到一个std::map<std:uint8_it, std::vector<bool>>
.实际数据被读入单个数据std::vector<bool>
.在任何人建议我使用之前std::bitset
,让我澄清一下,霍夫曼代码的位长可变,因此,我正在使用std::vector<bool>
.所以,鉴于我有我的符号和相应的规范代码,我如何解码我的文件?我不知道从哪里开始.有人可以向我解释我如何解码这个文件,因为我在搜索时找不到与之相关的任何内容.
我需要以二进制模式读取文件并将字节作为十六进制值存储在任何STL容器中(最好是std :: list).后来我需要将它们写回文件,也是二进制模式.所以,我宣布,
typedef unsigned char BYTE;
std::ifstream File("File_Name", std::ios::binary);
std::list<BYTE> File_Bytes;
Run Code Online (Sandbox Code Playgroud)
通过所有的搜索,我理解了一些事情.可以使用std :: istream :: read()或std :: istreambuf_iterator进行读取(我可能非常错误.请纠正我.)而read()函数只将char*作为内存中存储字节的参数输入流的大小.
如果我必须将文件中的字节读入BYTE列表并再次使用istream和ostream分别从BYTE列表写入文件,我将如何执行此操作?请为我澄清一下.谢谢.
注意:这实际上是用于霍夫曼编码器/解码器,我需要在程序内部压缩和解压缩,并将解压缩的位写为输出文件.这是为了验证压缩的无损性和程序的正确性.另外,任何人都可以告诉我如何将编码的二进制位写入文件以及编码的Huffman文件具有哪些文件扩展名?非常感谢你.