这是一个新手提出的两部分问题。
首先,我需要一个简单文本的编码(没有小写/大写的区别),并且我需要它比ASCII更节省空间。因此,我考虑创建自己的5位代码,包含32个字符的范围(字母表加上一些标点符号)。据我所知,所有的现代计算都是以字节为单位“思考”的,所以我无法真正定义我自己的5位编码,除非我真的求助于8位编码。
我想做的是:我定义自己的5位代码,并将文本保存在3个字符的块中,每个块保存为2个字节。每个块将占用总共15位,这些位将被存储在两个字节内(保存16位)。我可能会使用额外的比特进行奇偶校验,即使我实际上并不需要它。这种方法有意义吗?或者还有更好的方法吗?或者,我可以定义一个6位编码,并将文本保存到每个4个字符的块中,每个块保存在3个字节中。
问题的第二部分是:假设文本随后将被压缩(通过标准的文本无损算法,例如zip ),是否值得创建我自己的编码(如上所述)?或者,压缩算法是否会处理8位编码的空间低效问题,使压缩后的文件与最初使用5位或6位编码的压缩文件一样有效?如果是这样的话,对压缩前的文本使用5/6位编码就没有优势了,所以我会干脆跳过这一步。我需要从有经验的程序员那里知道,是什么情况?
谢谢大家
发布于 2013-03-23 19:20:31
压缩算法将更有效地为您处理编码。它将使用霍夫曼编码、范围编码或算术编码,以利用实际数据的统计信息,在每个字母中使用可变位数,甚至是分数位。如果您不尝试对字符进行预编码,将每个字符填充到少于8位的长度,这将会工作得更好。压缩算法通过在每个字节中找到的符号对统计数据进行计数,并在字节中查找重复的模式。
发布于 2013-03-23 19:21:09
唯一的歧义出现在消息的末尾,此时您可能有一个部分填充的缓冲区,尚未填充的位数为>= 5。因此:
a.您必须指定消息的长度(n*5位)或
b.您必须仅指定尾部位的长度(更有效)
https://stackoverflow.com/questions/15588510
复制相似问题