diff --git a/ReadMe.txt b/ReadMe.txt index 43548a0..a52fd02 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -115,6 +115,8 @@ updata_ssh.py 添加jwt模块程序文件下载 2023.11.18 注码工具添加写缓存信息功能 - +2023.11.21 + 分析工具修改上下限时自动重绘 + 添加huffman压缩编码,已完成编码,未验证 diff --git a/coder_2ch/prottcp.py b/coder_2ch/prottcp.py index 569c445..e7559ae 100644 --- a/coder_2ch/prottcp.py +++ b/coder_2ch/prottcp.py @@ -467,22 +467,17 @@ class protu(QObject): -def int2str(num:int): - s=str(num//100) - s=s+str(num%100//10) - s=s+str(num%10) - return s -if __name__ == "__main__": - u=protu() +# if __name__ == "__main__": +# u=protu() # u.init("utcp:7777") # u.send_file(0xee,"file/JQ_JCXB_V54.bin") # u.send_file(0xed,"../Objects/checker_gen1_app_20230602.bin") # 设置电阻 矫正值 - u.cmd=0x41 - data=bytearray([1,0,0x00,2,0,0x00,3,0,0x00,4,0,0x00,5,0,0x00,6,0,0x00,7,0,0x00,8,0,0x00,9,0,0x00,10,0,0x00,11,0,0x00,12,0,0x00,13,0,0x00,14,0,0x00,15,0,0x00,16,0,0x00,17,0,0x00,18,0,0x00,19,0,0x00,20,0,0x00]) + # u.cmd=0x41 + # data=bytearray([1,0,0x00,2,0,0x00,3,0,0x00,4,0,0x00,5,0,0x00,6,0,0x00,7,0,0x00,8,0,0x00,9,0,0x00,10,0,0x00,11,0,0x00,12,0,0x00,13,0,0x00,14,0,0x00,15,0,0x00,16,0,0x00,17,0,0x00,18,0,0x00,19,0,0x00,20,0,0x00]) # 测量电阻 # u.cmd=0x42 # data=bytearray([0]) @@ -495,7 +490,7 @@ if __name__ == "__main__": # data=bytearray([0x02]) # 上升 # data=bytearray([0x03]) # 下降 - print(u.encode(data).hex(' ')) + # print(u.encode(data).hex(' ')) # with open("file/EX_Coder_Test_2023-07-6.json","rb") as f: # json_obj=json.loads(f.read()) # d=scheme_to_byte(json_obj) @@ -518,3 +513,115 @@ if __name__ == "__main__": # 59 6D 03 00 31 00 00 31 CF + + + +def sort_table(index_table): + for i in range(len(index_table)): + item=index_table[i] + for j in range(i+1,len(index_table)): + if(index_table[j][1]>item[1]): + index_table[i]=index_table[j] + index_table[j]=item + item=index_table[i] + + +def exp(num:int,e:int): + res=1 + for i in range(e): + res*=num + return res + +def clac_zl_table(num:int): + count=1 + while(num>exp(2,count)): + count+=1 + # 使用短编码的个数 + diff=exp(2,count)-num + zl_table=[] + for i in range(diff): + zl_table.append(i) + # 使用长编码的个数 + diff2=num-exp(2,count-1) + for i in range(diff,diff+diff2): + zl_table.append(i*2) + zl_table.append(i*2+1) + print(zl_table) + return zl_table,count,diff + +def huffman(data:bytearray): + count_table=bytearray(256) + for i in data: + count_table[int(i)]+=1 + index_table=[] + for i in range(len(count_table)): + if(int(count_table[i])>0): + index_table.append((i,count_table[i])) + # print(index_table) + sort_table(index_table) + # print(index_table) + num=len(index_table) + # clac_zl_table(num) + ret=bytearray() + for i in index_table: + ret.append(i[0]) + return ret + + +# 根据值获取其序号 +def value_to_index(index_table:list,value): + for i in range(len(index_table)): + if(value==index_table[i]): + return i + return -1 + + +# 生成指定位数的mask +def calc_mask(num:int): + ret=0 + for i in range(num): + ret<<=1 + ret|=1 + return ret + + +# 把指定bit位数的数据添加进数组 bit_count<8 +def array_add_bit(data:bytearray,bit_index:int,dat:int,bit_count:int): + off=bit_index%8 + data[bit_index//8]|=((calc_mask(bit_count)&dat)<>(8-off))&0xff + bit_index+=bit_count + return data,bit_index + + + +def huffman_encode(data:bytearray): + ret=bytearray(1024) + index=0 + index_table=huffman(data) + zl_table,count,diff=clac_zl_table(len(index_table)) + print(index_table) + print(zl_table) + print(count,diff) + for i in data: + pos=value_to_index(index_table,i) + mask_bit_count=count + if(pos