c++ - 使用 BCL 进行文件压缩

标签 c++ compression

4.5 霍夫曼压缩

Syntax:

outsize = Huffman_Compress(in,out,insize)

outsize Size of output buffer after compression
in Pointer to the input buffer (uncompressed data)
out Pointer to the output buffer (compressed data)
insize Size of input buffer
The output buffer must be able to hold insize * 101 / 100 + 320 bytes.

4.6 霍夫曼解压 语法:

Huffman_Uncompress(输入、输出、尺寸、尺寸)

in Pointer to the input buffer (compressed data)
out Pointer to the output buffer (uncompressed data)
insize Size of input buffer
outsize Size of output buffer
The output buffer must be able to hold outsize bytes

应该使用多大的输出缓冲区?我试图找到一些例子,但一无所获

最佳答案

有了关于 Huffman_Compress 的更多信息,就可以确定最大压缩率和开销。有了它,您就可以计算由于解压缩而导致的最大可能扩展,并相应地分配一个输出缓冲区。但是,您不会喜欢大型压缩输入的答案。

既然解压缩需要在一次调用中完成,您应该将未压缩的长度与压缩数据一起发送。只需在压缩数据前加上包含未压缩长度的八个字节。在另一端,读取八字节长度,分配一个该大小的缓冲区,并将剩余部分解压到该缓冲区中。

关于c++ - 使用 BCL 进行文件压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096230/

相关文章:

c# - 有没有办法知道 byte[] 是否已被 gzipstream 压缩?

c++ - 依赖外部库的CMake导出包

c++ - 在这里删除 c++ volatile 是否安全?

objective-c - 如何使用 Objective C 压缩图像(png、jpg 等)

android - 什么时候使用 LEB128 (u/s)?

java - 用Java解压压缩的ubuntu lz4文件

c# - 处理大量文本字符串

c++ - 无法访问 std::map 中的结构值

c++ - 使用结构参数从程序集调用 C++ 函数

c++ - MessagePack C++ 和库类