VB编码, Gamma编码, Delta编码

2024-02-02 09:08
文章标签 编码 vb gamma delta

本文主要是介绍VB编码, Gamma编码, Delta编码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

VB编码, Gamma编码, Delta编码

  • 1. VB code
  • 2. Gamma(γ) code
  • 3. Delta(δ) code

学习笔记,记录VB编码, Gamma编码, Delta编码的自动计算代码。

1. VB code

例:十进制数824使用vb code进行编码
(1)将十进制数824转化为十六进制338
(2)将16进制中的每一位数当成单个十进制数后转换为二进制的四位数,然后连接起来0011 0011 1000
(3)去除开头所有0,得到1100111000
(4)通过在开头加0的方式,将字符串拆分为7个一组,得到0000110和0111000
(5)在最后一个7位数前面加1,其余不代表终止的7位数前面加0,凑成8个一组
(6)最终结果为:
00000110 10111000

编码代码,输入原始数字输出字符串:

def vb_encoding(ori_data):code = hex(ori_data)[2:]result = ''for i in code:temp = bin(int(i,10))[2:]if len(temp) < 4:temp = '0'*(4-len(temp)) + tempresult = result + temp# 去除开头的0result = result.lstrip('0')# 补全到7的倍数if len(result) % 7 != 0:result = '0'*(7-len(result) % 7) + result# 拆分为多行result_list = []result_list.append('0' + result[:7])while len(result) != 7:result = result[7:]result_list.append('0' + result[:7])result_list[-1] = '1' + result_list[-1][1:]return result_list

解码代码,输入二进制字符串得到多个原始数字:

def vb_decoding(bin_data):bin_data = bin_data.replace(" ", "")result = []while len(bin_data) != 0:t = 0while bin_data[t*8] != '1':t += 1# 获取当前数字的字符串if len(bin_data) == (t+1)*8:cut = bin_databin_data = ''else:cut = bin_data[:(t+1)*8]bin_data = bin_data[(t+1)*8:]# 开始还原数字code = []for i in range(len(cut)//8-1):code.append(cut[i*8: (i+1)*8])code.append(cut[-8:])code = list(map(lambda x:x[1:], code))code = ''.join(code)code = code.lstrip('0')if len(code) % 4 != 0:code = '0' * (4 - len(code) % 4) + codetemp_bin = []for i in range(len(code)//4-1):temp_bin.append(code[i*4: (i+1)*4])temp_bin.append(code[-4:])temp_bin = list(map(lambda x:str(int(x,2)), temp_bin))number = int(''.join(temp_bin), 16)result.append(number)return result

2. Gamma(γ) code

Gamma编码
对数字k
(1) kd = (log2(K))向下取整
(2) kr = K - 2^kd
kd使用unary表示,即在用kd个1加上一个0
kr使用binary表示,即用二进制编码表示kr

编码代码,输入原始数字输出字符串:

def gamma_encoding(ori_data):kd = math.floor(math.log2(ori_data))kr = ori_data - 2**kdresult = '1'*kd+'0'+bin(kr)[2:]return result

解码代码,输入二进制字符串得到多个原始数字:

def gamma_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一个0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一个就是0if index_of_zero == 0:number_list.append(1)bin_data = bin_data[1:]# 否则else:bin_data = bin_data[index_of_zero + 1:]kd = index_of_zerotran_kr = bin_data[:kd]kr = int(tran_kr, 2)bin_data = bin_data[kd:]ori_num = 2 ** kd + krnumber_list.append(ori_num)return number_list

3. Delta(δ) code

在Gamma编码的基础上,对kd再进行一次gamma编码得到kdd与kdr,从而进一步缩短编码的长度。

编码代码,输入原始数字输出字符串:

def delta_encoding(ori_data):kd = math.floor(math.log2(ori_data))kr = ori_data - 2**kdtran_kr = bin(kr)[2:]# 因为后面kd要+1,所以这里先编码完最后一段if len(tran_kr) < kd:tran_kr = '0'*(kd-len(tran_kr)) + tran_krkd = kd + 1kdd = math.floor(math.log2(kd))kdr = kd - 2**kddtran_kdd = '1'*kdd + '0'tran_kdr = bin(kdr)[2:]if len(tran_kdr) < kdd:tran_kdr = '0'*(kdd-len(tran_kdr)) + tran_kdrresult = tran_kdd + ' ' + tran_kdr + ' ' + tran_kr#print("kdd:", kdd, ", kdr:", kdr, ", kd:",kd,", kr:", kr)return result

解码代码,输入二进制字符串得到多个原始数字:

def delta_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一个0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一个就是0if index_of_zero == 0:number_list.append(1)bin_data = bin_data[1:]# 否则else:bin_data = bin_data[index_of_zero + 1:]kdd = index_of_zerotran_kdr = bin_data[:kdd]kdr = int(tran_kdr,2)bin_data = bin_data[kdd:]kd = 2**kdd + kdr - 1tran_kr = bin_data[:kd]kr = int(tran_kr,2)bin_data = bin_data[kd:]ori_num = 2**kd + krnumber_list.append(ori_num)return number_list

这篇关于VB编码, Gamma编码, Delta编码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/670201

相关文章

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &