位操作(减少位)

时间:2015-02-23 19:55:40

标签: c binary compression bit-manipulation huffman-code

假设一个字节是8位,而一个字符是1个字节, 有没有办法操纵一个字符数组(一个字符串),这样我们就可以将字符串中的每个字符表示为更紧凑的位数(比如5位?)

1 个答案:

答案 0 :(得分:3)

当然,只需将每个字符映射到新编码即可。但是,当您减少位数时,您支持“字母表”中可能较少的字符。 例如,5位只能支持32个可能的字符。

霍夫曼编码允许使用可变长度代码,但如果设计正确,您将平均拥有更短的代码。

第三种选择是保持ascii编码,但使用某种压缩来减少字节数。

有很多实际的实施方法可以做到这些。例如,如果您知道只有26个大写字母'a' - 'z',空格和没有数字,则可以使用5位值,因为您只需要27个值。一个简单的方法是转换每个字符:

out_char = (in_char == ' ') ? 31 : (in_char - 'A');

如果你需要大写和小写,你需要52个字符,所以你需要6位。

霍夫曼的实施需要了解每个角色出现频率的统计数据。