c 准备读取变长度比特流

对一字节比特主要有三种操作:

        1. 赋值:o=i|o

        2.  提取i 的高几位比特   o=i>>5|o    //提取5位i

        3.   保留i 的低几位比特    o=(i&0b00000111)|o   //保留i的后3位到o

     还有两种重要的操作:

其1为判断某字节有多少位有效比特,也就是字节的不为0的最高位到最低位有多少位。其二是两个多比特数拼接成一个大整数。

再加入两指针,一个为存入指针,一个为读取指针就可完成变长度比特的读取。

思路是:因为霍夫曼编码的长度最长为16比特,所以选一个short  为操作单元。比如刚开始short等于0相当于16位都是空,可以填充2个字节的输入比特流,提取比特流操作都是从short的高15位开始,降序到低位。比如short提取高5位比特流后还剩11个有效位。再把这11个位左移5位。空下的5位再读入新字节的高5位,低3位暂存,再将新组成的16位short 比对操作。以此为循环。也就是生成新16位short, 移位比对,把剩下的比特左移,再填充空字节,再比对。

 

 

 

 

 

 

 

 

你可能感兴趣的:(c语言)