Gamma压缩与解压

 #!/usr/bin/python
# coding:utf-8




def to_bin(num):
    a = int(num)
    mid = []
    str = ''
    while True:
        if a == 0:
            break
        a, rem = divmod(a, 2)
        mid.append(rem)
    mid.reverse()
    for i in mid:
        str = str + '%d' % i
    return str




def Gamma(num):
    cur = ''  # 偏移
    num_bin_coding = to_bin(num)  # 二进制编码
    cod_length = len(num_bin_coding)  # 编码长度
    length = '1' * (cod_length - 1) + '0'  # 长度
    for i in range(1, cod_length):
        cur = cur + '%s' % num_bin_coding[i]
    return length + cur


def decompression(str):
    i = 0
    temp = 0
    num = 0
    b = []
    
    while(i < len(str)):
        if(str[i] != '1'):
            a = [1]
            j=0
            for j in range(1, i - temp + 1):
                a.append(int(str[i + j]))
            a.reverse()
            for k in range(0, len(a)):
                num = num + a[k] * (2**k)
            b.append(num)
            i = i + j
            temp = i + 1
            num = 0
        i=i+1
    return b
str1=Gamma(1)
str2 = Gamma(511)
str3 = Gamma(131)


print (str1)
print (str2)
dep = decompression(str1 + str2 + str1 + str1 + str3 + str1)
print (dep)


版权声明:本文为dengjiaxing0321原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。