1
xenme 2015-01-02 22:08:51 +08:00
8bit合成一个byte写入binary文件就好了~
|
3
ryd994 2015-01-02 22:30:35 +08:00
+
<< + << 就这样…… |
4
zealic 2015-01-02 22:31:15 +08:00
File Format:
Magic Header: 0xBB110000 // uint32 Data Length: data size // uint32 Padding bit size: 0-8 // ushort Data: <YOUR HUFFMAN ENCODED DATA> |
9
ryd994 2015-01-02 22:44:35 +08:00
@CBBing 首先说说你用的什么语言, 还有计算完成时的结果数据是什么样子什么类型的吧
不过大多数语言用wb模式打开文件就可以了 |
10
CBBing OP @ryd994 我用的C跟c++,程序完成时应该有所有字符的Huffman编码(这个倒不难),主要是要求用bit位存储,就是将Huffman编码的0和1用bit类型存储(如果用字符的话也不难)。
|
12
CBBing OP @ryd994 我Huffman编码后的数据是字符组的,比如说字符a的编码是001001,都是字符的,现在要把它用bit类型的表示,我的一个思路是,把它用short类型的整形存储,这样可以通过读取的数字知道所存的是什么,虽然有所缩减内存,但比起要求还是差一点
|
13
nilennoct 2015-01-02 23:48:26 +08:00 via iPad 1
抛砖引玉==buffer也可以开大点,比如byteBuf[32],再拿个变量记录bufOffset。。。
``` c++ ofstream outputBinFile; char byteBuf = '\0'; short bitOffset = 7; while (data not output completely) { byteBuf |= {your data here(0 or 1)} << bitOffset; if (bitOffset == 0) { outputBinFile.write(&byteBuf, 1); byteBuf = '\0'; bitOffset = 7; } else { --bitOffset; } } // output the rest data if (bitOffset < 7) { outputBinFile.write(&byteBuf, 1); } ``` |
14
nilennoct 2015-01-02 23:51:00 +08:00 via iPad
对了 buffer用char*的话也要记得每次用前先填零
|
15
CBBing OP @ryd99 举个例子,字符a的Huffman编码是001001,要求是将其存到文件中,只占用6个bit,但我做的是将它变成00100100,用了8个bit,而且有可能还会有冲突
|
18
choury 2015-01-02 23:56:18 +08:00 via Android
我写过一个动态haffuman的程序,不过声明一点,你自己看吧,我不负责你能不能看懂,也就是不会给你讲解
https://gist.github.com/choury/a68006b3fe1a6a78e29d |