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

相关文章

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 &

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

题目: 题解: 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 & MASK1) == 0) {return

form表单提交编码的问题

浏览器在form提交后,会生成一个HTTP的头部信息"content-type",标准规定其形式为Content-type: application/x-www-form-urlencoded; charset=UTF-8        那么我们如果需要修改编码,不使用默认的,那么可以如下这样操作修改编码,来满足需求: hmtl代码:   <meta http-equiv="Conte

4-4.Andorid Camera 之简化编码模板(获取摄像头 ID、选择最优预览尺寸)

一、Camera 简化思路 在 Camera 的开发中,其实我们通常只关注打开相机、图像预览和关闭相机,其他的步骤我们不应该花费太多的精力 为此,应该提供一个工具类,它有处理相机的一些基本工具方法,包括获取摄像头 ID、选择最优预览尺寸以及打印相机参数信息 二、Camera 工具类 CameraIdResult.java public class CameraIdResult {

用VB创建开始菜单快捷方式(无需其他DLL)

Option Explicit   Private Sub Command1_Click()   CreateProgManGroup Me, "测试", "test.grp"   CreateProgManItem Me, "d:\ghost.exe", "Ghost"   CreateProgManItem Me, "d:\setupQQ.exe", "QQ"   End

Python字符编码及应用

字符集概念 字符集就是一套文字符号及其编码的描述。从第一个计算机字符集ASCII开始,为了处理不同的文字,发明过几百种字符集,例如ASCII、USC、GBK、BIG5等,这些不同的字符集从收录到编码都各不相同。在编程中出现比较严重的问题是字符乱码。 几个概念 位:计算机的最小单位二进制中的一位,用二进制的0,1表示。 字节:八位组成一个字节。(位与字节有对应关系) 字符:我们肉眼可见的文字与符号。

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

VB项目中必需的几点技巧

1.    点击右上角的关闭按钮,要弹出“提示”,是否关闭,但用右键关闭时,不能重复提示 在vb中找到这个事件Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)If MsgBox("是否要退出", vbYesNo + vbDefaultButton2, "提示") = vbNo ThenCancel