我正在为霍夫曼编码做一些作业。我已经完成了 Huffman 算法,但需要稍微改变它以处理二进制文件。我花了一些时间阅读相关问题,也许由于我对数据类型和二进制文件缺乏了解,我仍然有点挣扎,所以希望我不会重复之前的问题(我不会发布相关的代码到程序的霍夫曼部分)。
这是关键短语:“您可以假设将映射到代码字的每个符号都是一个 4 字节的二进制字符串。”,我想我知道的是 Char 代表一个字节,而 unsigned int 代表四个字节,所以我猜我应该一次将输入的四个字节读入一个无符号整数缓冲区,然后为程序的霍夫曼部分收集我的数据。
int main() {
unsigned int buffer;
fstream input;
input.open("test.txt", ios::in | ios::binary);
while(input) {
input.read(reinterpret_cast<char *>(&buffer), 4);
//if buffer does not exist as unique symbol in collection of data add it
//if buffer exists update statistics of symbol
}
input.close();
}
这看起来像是处理数据的好方法吗?如果只剩下 1,2 或 3 个字节,我应该如何处理文件的最后?因此,我只是将缓冲区作为 unsigned int 存储在结构中。只是出于好奇,我将如何将缓冲区重新转换为字符串?
编辑:存储霍夫曼压缩文件的标题的最佳方法是什么?