编码总结

信源编码的代码实现 (香农编码、费诺编码、哈夫曼编码、游程编码、算术编码) 信源编码的代码实现 (c++版) 阅读详情

摘要:
本文旨在以吃快餐的方式帮助您理解编码问题,如果想要深入的理解,请仔细阅读本文中所给出的链接。

字符集和编码

众所周知,机器所能理解的语言只有0和1,而人类的语言却有着众多的符号。如何将这些符号转换为机器所能理解的语言呢,答案就是对这些字符进行编码。

字符集和编码是两个不同的概念,这里是理解编码的重点,一定不要混淆。

  • 字符集
    所谓的字符集其实就是字符的集合。字符集的发展一共经历了三个阶段,第一是ASCII,学过计算机的应该都不陌生。这个阶段计算机还只有在美国使用,所以产生了ascii码,一个字节来表示所有字符已经足够美国人用了。但是随着计算机的发展,其他国家也想使用计算机。这时,编码就进入了ANSI本地化阶段。这个时期的编码都是各个国家区域自己定义的,一个编码在这个区域中是一个含义,但是到了另一个区域就代表另一个字符。为了使得编码能够统一,编码的发展进入了第三个阶段,统一编码阶段。这个时候由国际统一标准协会制定的字符集,无论拿到哪里都是代表的同一个含义。
    常见的字符集有unicode,GB2312(中国的),GBK等。
    简而言之,使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。

  • 编码

    一般来说, 每一个字符集都对应着一种编码。这个编码就是该字符集在内存或文件中的存放编码。
    对于unicode来说,它的编码方式有很多种(UTF-8,UTF-16等)。产生的原因是统一采用双字节编码的时候对英文字符传输会造成浪费,所以就有了utf-8。

    简而言之,规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。

关于编码的详细解释请参照这篇博客(强烈推荐)

编程时候的编码

无论是c,c++还是java,我们编写文件的时候都需要有一个文件的编码,这个编码是对编译器来说的。
也就是说你需要告诉一个编译器我的文件时什么编码,这个时候它才会将你源码中的字符正确的识别。

然后重点来了,识别之后呢?我们的字符时如何存在内存中的?
有些人认为源码的文件编码就是字符实际在内存中的编码,其实这是错误的。举个最简单的例子,java程序的所有编码都是unicode,但是你的源文件编码可以有很多种。由此我们可以知道字符在内存中的编码很可能与源文件的编码是不同的。你可以采用字节数组的方式产看文字在内存中的实际编码。(这里的文字指的都是str=“中文”这种变量)

对于java 来说,编码转化是很容易的,new String(byte[],charset)就能将字节数组以指定的编码方式去编码。而对于c++来说却没有这么方便的工具,只能依赖第三方库或者自己写转换代码了。

信息论与编码-python实现三种编码(香农编码,费诺编码,赫夫曼编码) 香农编码,费诺编码,赫夫曼编码(python实现) 开始参考了网上其他人的代码,但后来都发现要么代码有错误,要么输出结果不符合自己的预期,于是就重新实现了一下,代码仍存在一些小问题,但是能够满足作业要求,重要的是看懂思路,然后按照自己的想法去实现 代码存在的问题: 香农编码和费诺编码起始的符号及其概率都已给出并且做了初步处理,有想法的可以改成用户自定义输入 费诺编码的实现借助了字典和递归,但是如果初始输入的概率集中存在相同的key(也就是概率集中存在相同概率),那么字典update()方法的覆盖特性会使两 阅读详情

相关推荐

请求编码、响应编码及URL编码的原理

1 请求编码 1.1 直接在地址栏中给出中文 请求数据是由客户端浏览器发送服务器的,请求数据的编码是由浏览器决定的。例如在浏览器地址栏中给出:http://localhost:8080/hello/AServlet?name=传智,那么其中“传智”是什么编码的呢?不同浏览器使用不同的编码,所以这是不确定的! IE:使用GB2312;   FireFox:使用GB2312;

错觉 5960

计算机编码的发展

第一阶段:ASCII 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码 第二阶段:风涌云起的各国编码 但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到...

FGY_u的博客 1311

音频编码之aac编码原理

AAC基本概况: l AAC(Advance Audio Coding): 即高级音频编码,出现在1997年,基于MPEG-2的音频编码技术,当时被称为MPEG-2 AAC,因此把其作为MPEG-2(MP2)标准的延伸。是由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式,随着MPEG-4(MP4)标准在2000年的成型,则为AAC也叫M4A。 l 和AC3编码关系: 和AC3关系不大,AC3早于AAC,是由AAC的发起单位杜比实验室和日本先锋合作研制

小马哥博客 8997

【Java】各阶段的编码

在Java程序整个开发及运行的过程中,和编码有关的阶段分为下面几种:

Ving_SuiXin的博客 646

数据预处理之独热编码、标签编码与哑编码

数据分类 我们在用模型去解决机器学习问题的时候,首先很重要的过程就是对特征的预处理。我们的数据可以分为连续型和离散型。 对于连续型数据,我们一般的做法是对其进行标准化或者归一化;对于离散型数据,我们基本就是按照one-hot(独热)编码,该离散特征有多少取值,就用多少维来表示该特征。 标签编码(LabelEncoder) LabelEncoder是用来对分类型特征值进行编码,即对不连续的数值或文本...

weixin_43641241的博客 2674

Cesium+Three.js融合实战:从零构建GIS与BIM一体化场景

本文详细介绍了如何将Cesium与Three.js进行技术融合,从零构建GIS与BIM一体化场景。通过环境配置、核心场景搭建、坐标转换、性能优化及交互处理等实战步骤,阐述了Cesium负责宏观地理空间渲染、Three.js处理微观精细BIM模型的协同方案,为智慧城市、数字孪生等应用提供关键技术实现路径。

weixin_29230865的博客 460

"软件开发生命周期"有几个阶段?

关注+星标公众号,不错过精彩内容作者 | 情报小哥ID |嵌入式情报局很多初学软件编程的小伙伴,只顾着“编程”,其他开发相关的一些“技能”很少关注。如果你想以后进入大公司,除了写代码之后,其他还需要掌握的技能很多,比如本文分享的"软件开发生命周期"你有必要学习并了解一下。1概念为了使规模大,结构复杂和管理复杂的软件开发变得容易控制和管理,一套软件开发的明确概念化过程是必不可少的,那么软件开发生命...

strongerHuang 3852

从数据手册到代码:一步步解读SC7A20寄存器配置与加速度值换算原理

本文详细解析了SC7A20三轴加速度传感器的寄存器配置与加速度值换算原理。从数据手册出发,逐步拆解关键寄存器设置,并推导原始ADC值到物理加速度的完整换算过程,帮助开发者深入理解传感器底层工作原理,提升嵌入式开发效率。

weixin_29179311的博客 368

CTF密码学常见加密解密总结

CTF密码学常见加密解密总结 被实验吧一堆大佬出题人折磨的死去活来的我,嘤嘤嘤。在此做个总结,防止自己忘掉: Escape加密/UnEscape解密 JavaScript unescape() 函数可对通过 escape() 编码的字符串,找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码...

qq_40837276的博客 5万+

银河麒麟服务器操作系统V10-SP1部署gitlab服务

银河麒麟高级服务器操作系统 V10 SP1 部署GitHub

weixin_43173670的博客 2155

CentOS7安装OpenSSL1.1.1s

CentOS7安装OpenSSL1.1.1s

Bertram的博客 733

信源编码的Matlab实现:费诺编码、香农编码、哈夫曼编码、算术编码、LZ编码、连续信源编码量化 M02014167方正,P02114173陆康超

信源编码的Matlab实现:费诺编码、香农编码、哈夫曼编码、算术编码、LZ编码、连续信源编码量化简介

lily_ahu的博客 1万+

【史上最全面esp32教程】oled显示篇

esp32-arduino Oled屏幕的使用

m0_62599305的博客 1万+

几种不等长编码的编码方法及例题

一、Huffman编码方法及例题 Huffman编码方法: ①将信源S的n个符号{s1,s2,…sn}按概率从大到小排列; ②将概率最小的两个符号分别分配给“0”和“1”码元,然后其概率相加,合成一个节点,作为一个新的符号,重新与其它符号按概率大小排列; ③重复这样的步骤,一直到处理完全部状态 Huffman编码例题: 例1. 例2. ...

UVM频率 1万+

23、微波电路中的过孔、过孔围栏与接地焊盘建模分析

本文详细分析了微波电路设计中过孔、过孔围栏及接地焊盘的建模与优化方法。探讨了过孔模型的发展及其电感与电容特性,通过场求解器和集总元件模型提高建模精度。此外,分析了过孔隔离围栏在改善信号隔离中的作用,并通过2.5D和3D电磁仿真验证其效果。最后,研究了接地焊盘中过孔布局对电路稳定性的影响,提出了优化过孔位置以消除谐振和杂散振荡的方法。文章为微波电路设计提供了重要的理论支持和实践指导。

convnet3designer的博客 164

Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南

Prompt进阶2:LangGPT(构建高性能Prompt策略和技巧)--最佳实践指南

丨汀、的博客 2651

什么是算术编码、算术编码的编码和解码

什么是算术编码,如何进行算术编码和解码

TOM0078的博客 1万+

从 Open SQL JOIN 走向 ABAP CDS Association:把查询写成可复用的数据模型

摘要: 本文通过飞行模型示例,对比了ABAP中三种表关联实现方式:Open SQL JOIN、CDS显式JOIN和CDS Association。重点解析了Association的本质是将表关系声明为数据模型语言,使用时通过路径表达式按需展开为JOIN。文章指出路径表达式在不同位置会默认展开为不同JOIN类型(如SELECT列表默认为LEFT OUTER),并演示了如何用[inner]强制指定INNER JOIN。最后结合S/4HANA实际案例,说明Association通过中心化关系定义和路径复用,能有效

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 384

机器学习常用编码方式:标签编码、序列编码、独热编码、频数编码、目标编码

在机器学习中,处理离散属性(也称为分类变量或类别特征)是一个重要的任务,需要将离散属性转换为可供模型使用的数值表示。

qq_46082988的博客 7066

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

曼彻斯特编码,差分曼彻斯特编码和NRZI编码

曼彻斯特编码 曼彻斯特编码(Manchester Encoding),也叫做相位编码( Phase Encode,简写PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。 在曼彻斯特编码中,用电压的跳变的不同来区分1和0。 从低电压到高电压的跳变表示0; 从高电压到低电压的跳变表示1。 如图: 也就是说,若我们已知一个数字信号,就可以通过信号中的每一个时钟信号下电...

mini_chou_的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

机器学习中的编码:Index编码、OneHot编码和Multiple编码及其对比

文章目录一、 Index编码二、 OneHot编码独热编码优缺点什么情况下(不)用独热编码?什么情况下(不)需要归一化?三、 Multiple编码如何使用Multiple编码呢?四、 编码比较参考文献 一、 Index编码 用来对离散的类型特征进行编码,如,不连续的数值、文本,将离散的特征转换成连续的数值型变量。基于索引的编码可以起到数据归一化的作用,如,id为1和10000,当id作为LR的特征...

WaltSmith的博客 6383

HEX编码、Base64编码

摘要 本文将讲述HEX 和Base64,编码的规则。 HEX编码 hex编码也称之为Base16 编码 就是把一个字节,用十六进制来表示, 表示的结果得是字符形式的。 说过程大家就会更加容易理解 比如说字符的 ‘a’,在计算机底层存储的是 0110 0001 ,对应的16进制就是61 ,它对应的字符 是'61' 也就是说 ‘a’ 经过HEX编码转化成了 '61' ,从计算存储二进制的角度是 从0110 0001经过HEX编码成了 0011 0110 0000 0001,占用的存储扩大了一倍。 其他任意

你好 1万+

ASCII编码、HEX编码、URL编码、Unicode编码、Base64编码

目录 ASCII编码 HEX编码 URL编码 Unicode编码 ASCII编码 字符的ascii编码可以对照ASCII编码表 中文的ASCII编码是对照unicode编码表 string = input("请输入一个字符: ") print(string+" 的ASCII码为:",ord(string)) #将字符转换为ascii码值 number = input(...

谢公子的博客 7189

数字视频编码-利用MATLAB实现熵编码和解码(哈夫曼编码,算术编码,游程编码)

利用MATLAB实现哈夫曼编码,算术编码,游程编码

qq_33483839的博客 2834
上一篇: 浅谈Java IO
下一篇: eclipse 安装 fatjar 插件
LuoYuWS
博客等级 码龄11年 1粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值