自定义编码和压缩

时间:2013-03-23 15:26:50

标签: encoding character-encoding compression

这是一个来自新手的两部分问题。

首先,我需要一个简单文本的编码(没有小写/大写区分),我需要它比ASCII更节省空间。所以我想到了创建我自己的5位代码,包含32个字符的范围(字母加上一些标点符号)。 据我所知,所有现代计算都以字节为单位进行“思考”,因此我实际上无法实际定义自己的5位编码,而实际上并没有采用8位编码。

我在想的是: 我定义了自己的5位代码,并将文本保存为3个字符的块,每个块保存为2个字节。每个块将占用总共15位,这将存储在两个字节(保持16位)内。我可能会使用额外的位来进行奇偶校验,即使我实际上并不需要它。 这种方法有意义吗?或者有更好的方法吗? 或者,我可以定义一个6位编码,并将文本保存为每个4个字符的块,每个块保存为3个字节。

问题的第二部分是:假设文本将被压缩(通过文本的标准无损算法,例如zip),是否值得创建我自己的编码(如上所述) ?或者压缩算法是否会处理8位编码的空间效率低下,使得压缩效率与最初使用5位或6位编码进行编码的压缩文件一样高效?如果是这样,我没有使用5/6位编码进行预压缩文本的优势,所以我只想完全跳过这一步。 我需要从有经验的程序员那里知道,情况如何?

谢谢大家

2 个答案:

答案 0 :(得分:1)

压缩算法将更有效地处理编码。它将使用霍夫曼,范围或算术编码,每个字母使用可变数量的位,甚至小数位,利用实际数据的统计数据。如果您尝试对字符进行预编码,将其填充为每个字符少于8位,则效果会更好。压缩算法按每个字节中的符号计算统计数据,并查找字节中的重复模式。

答案 1 :(得分:1)

  1. 您无需担心“阻止”。只需将5位加到8位缓冲区,当缓冲区填满后将其冲出并将剩余的位推入缓冲区。
    当消息可能有一个部分填充的缓冲区时,唯一的歧义出现在一个尚未填充的位数> = 5的情况下。 一个。您必须指定消息的长度(n * 5位)或
    湾您必须仅指定尾随位的长度(更有效)

  2. 压缩算法实际上可能会受到自定义打包的不利影响 - (取决于原始数据的类型,如文本)。