首页新闻找找看学习计划

数据压缩问题

0
悬赏园豆:50 [已解决问题] 解决于 2013-11-28 09:52

求一种保存float类型数据到文件的方式,要求可以直接读取到第N个数据的值,要保存后文件越小越好

油纸伞的主页 油纸伞 | 初学一级 | 园豆:37
提问于:2012-07-16 16:58
< >
分享
最佳答案
1

简单的压缩算法就是把byte字节分成两部分 比如上3位保存重复的数据次数,下5位保存数值,前提是数据一般都是比较小的

收获园豆:40
龙的专属 | 菜鸟二级 |园豆:248 | 2012-07-20 09:58

能具体说下吗,或者举个例子,谢谢了

油纸伞 | 园豆:37 (初学一级) | 2012-07-20 10:00
其他回答(4)
0

直接 转化成16进制 ,连续 保存,读取的 时候,根据 位数 *长度,可以得到开始位置,而后二进制 读出数据,就可以了吧。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-07-16 17:14

现在读取都是按“位数 *长度”做的,一个单精度浮点数的位数是4,都是这么4*n,但是浮点数怎么给转成16进制?这样转完之后,每一个浮点数占多少字节

支持(0) 反对(0) 油纸伞 | 园豆:37 (初学一级) | 2012-07-16 17:19
0

就算不转换直接存放成TXT文件也要不了多少空间啊...干嘛压缩?

hexllo | 园豆:405 (菜鸟二级) | 2012-07-16 17:41

这个文件是一个计算的计算结果,类似于一个100米高、50米宽、200长的长方体,这个长方体里面充满了一个个的0.2米长宽高的小立方体,每一个立方体有个单精度值,而该数据文件就是用来保存这个值的,几百兆的文件呢,我想把这个文件变小点,越小越好。

支持(0) 反对(0) 油纸伞 | 园豆:37 (初学一级) | 2012-07-16 17:46
0

这个东西直接使用google 的protobuf。

c#版本是protobuf.net

具体的代码 随便搜索了下。http://www.cnblogs.com/bluesky4485/archive/2009/08/10/1543133.html

LZ去看下吧。

收获园豆:10
````` | 园豆:14268 (专家六级) | 2012-07-18 09:14

我已经是直接把一个个的float保存到二进制文件中,现在需要的是进一步压缩,你说的那个我也知道,但是protobuf并没有把float从4个字节变成2个字节~

支持(0) 反对(0) 油纸伞 | 园豆:37 (初学一级) | 2012-07-18 09:20

@油纸伞: float应该不能够被压缩到2个字节。。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2012-07-18 09:36

@imfunny: 我现在的解决是直接二进制表示,一个字节中的前4位表示一个0-9的数,后4位表示另一个0-9的数,当然这基于我的数据不是太大也不是太精确的,799.9~-799.9

支持(0) 反对(0) 油纸伞 | 园豆:37 (初学一级) | 2012-07-18 16:42

@imfunny: 如果后面发现数据中有超出这个范围的,我就完蛋了~

            //-  7     9      9  .   9    
            //   a3    a2    a1    b1   
            //0 000 0000 0000 0000 
            //     c1        c2     舍弃 
支持(0) 反对(0) 油纸伞 | 园豆:37 (初学一级) | 2012-07-18 16:45
0

嗯,还是“龙的专属”说的比较靠谱,我就是这么弄的,因为可以确定你的数据的大概范围,就可以把这个数据占用的byete位数中不使用的部分给省略掉

油纸伞 | 园豆:37 (初学一级) | 2013-11-28 09:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册