假设一个字节是8位,而一个字符是1个字节, 有没有办法操纵一个字符数组(一个字符串),这样我们就可以将字符串中的每个字符表示为更紧凑的位数(比如5位?)
答案 0 :(得分:3)
当然,只需将每个字符映射到新编码即可。但是,当您减少位数时,您支持“字母表”中可能较少的字符。 例如,5位只能支持32个可能的字符。
霍夫曼编码允许使用可变长度代码,但如果设计正确,您将平均拥有更短的代码。
第三种选择是保持ascii编码,但使用某种压缩来减少字节数。
有很多实际的实施方法可以做到这些。例如,如果您知道只有26个大写字母'a' - 'z',空格和没有数字,则可以使用5位值,因为您只需要27个值。一个简单的方法是转换每个字符:
out_char = (in_char == ' ') ? 31 : (in_char - 'A');
如果你需要大写和小写,你需要52个字符,所以你需要6位。
霍夫曼的实施需要了解每个角色出现频率的统计数据。