日期:2014-05-18  浏览次数:20769 次

算法问题(4字节表示多个数字)
比如,一本书的属性:

年级 科目 出版社 书名
1 2 3 三国演义
年级科目出版社的数字,表示相应年级,相应出版社,相应科目。而且前三个属性在文件里只留了一个int的长度,即4字节。
但是后来数据源升级了,

年级 科目 出版社 书名
1,2 1,2 2,3 三国演义

以前一个int的地方现在无法表示多个int了。而且年级科目出版社的个数很多,超过了32个。所以无法用编码的方式了。

如何整呢?

------解决方案--------------------

猜是报文编解码之类的吧

似乎没有办法,如果不好在中间插入,在尾部增加附加信息吧。
------解决方案--------------------
将原来的旧数据直接追加4字节,内容就是 -1 -1 -1 -1,你可以这样认为,-1表示唯一出版社,其他数字表示其他出版社
------解决方案--------------------
年级如果是1~12级(小学中学),用1.5个字节就可以了,使用位掩码表示它们的组合:
比如 0000 0000 0000 0001 表示一年级,0000 0000 0000 0011,表示一年级和二年级。……


------解决方案--------------------
很简单,扩展原来数据源,把int32扩展成int64或byte[16]等等,自然就可以解决你的问题,否则从概率上说,任何的组合都有可能存在,所以存储上是无法压缩的,32位以内的组合可以使用int32来表示,超过了只能扩展,除非能肯定一些组合不可能存在,才存在压缩的可能。至于什么编码就不用考虑了(出现概率越高的编码用越短的编码表示)这种编码无法解决一些组合无法表示的问题,