打包和解包

回忆上次内容

  • decode
  • 就是解码
  • 解码和编码可以转化
  • encode 编码
  • decode 解码
  • 互为逆过程
  • 大小写字母之间序号全都相差(​​32​​)​​10进制​

编辑

  • 这是为什么呢?

差距

  • 大写字母和小写字母
  • 总是相差(​​32​​)​​10进制​

编辑

  • 从10进制角度看不清楚
  • 我们从16进制的角度看看

16进制

  • 正好是(​​0x20​​)​​16进制​

编辑

  • 为什么不多不少
  • 就差 0x20 呢?
  • 怎么那么寸呢?
  • 转化为2进制之后
  • 恰好是1位(bit)
  • 这是偶然的吗?

ASCII 码表趣事

  • 其实最初相差的并不是 0x20
  • 之前 ibm 的 EBCDIC 编码也是这样的

正在上传…重新上传取消

  • 也相差一个2进制位

编辑

  • EBCDIC问题是字母不连续
  • i、j之间不直接相连
  • EBCDIC最终被ascii所淘汰

ASCII

  • ASCII字母是连续的
  • 而且大小写字母间
  • 相差正好是 1个 二进制位
  • 对应 b6 这个位
  • 那为什么要差 1个 二进制位 呢?

编辑

  • 有了这种对应关系之后
  • 做大小写不敏感的字符串查找就快多了
  • 这个 0x20 发生在 1963 年 5 月
  • The X3.2.4 task group voted its approval for the change to ASCII at its May 1963 meeting.
  • Locating the lowercase letters in columns 6 and 7 caused the characters to differ in bit pattern from the upper case by a single bit, which simplified case-insensitive character matching and the construction of keyboards and printers.
  • 当时的目的是
  • 降低大小写不敏感字符串匹配的难度
  • 降低打字机键盘的构造成本
  • 如果搜索中遇到的是小写字母
  • 修改1位之后
  • 小写就都变成大写
  • 不用查找对应关系表匹配
  • 然后再观察全大写的情况下是否匹配
  • 这就是大小写字母的情况
  • ​0x41-0x5A​​这个范围是大写字母
  • ​0x61-0x7A​​这个范围是小写字母
  • 除了大小写字母之外
  • 数字字符又是如何表示的呢?

ASCII 码表范围

编辑

  • ​0x30-0x39​​这个范围是数字
  • 数字的编码减去​​0x30​​正好得到数字本身
  • 后四位刚好是BCD编码模式
  • Binary-Coded Decimal

编辑

  • 我们再来看看 ASCII 除了字母和数字还有什么?

各种符号

  • 各种符号是不连续的

编辑

  • 穿插在数字、字母周围
  • sp 其实就是space(空格)
  • 表格最左边是什么呢?

ASCII

  • ​0x20-0x7F​​ 之间有各种真实字符

编辑

  • ​0x00-0x1F​​ 之间的东西是什么?
  • 前两列都是对应多个字符的
  • 具体含义目前还不知道
  • ASCII中的字符本来英语里就有
  • 但是字符是英文字符、数字和标点
  • 怎么编码的呢?

ASCII由来

  • ASCII码是由电报代码发展而来的

正在上传…重新上传取消

  • 由贝尔数据服务公司推广

编辑

  • 电报码不是摩斯电码吗?

摩斯电码

  • 更早之前确实是摩斯电码
  • 下图是他的编码表
  • 分成长和短两种信号,就是嘀和嗒

编辑

  • 欢迎您有机会来看看oeasy电学、科学史那几个系列
  • 还记得encode/decode中的code么?
  • 曾经一度指的就是各种电报编码汇编
  • 后来统一到摩斯电码

摩斯电码通信规则

  • 下图是他的通信规则
  • 三个断确认本字符结束了
  • 三个断就是字符之间的分隔符
  • 录入状态并不是 0、1 两种状态
  • 而是长、短、暂停三种状态

编辑

  • 编码的原则是什么呢?

效率问题

  • 编码的规则是常用的字符点击次数少
  • 按照字符出现概率分配对应点击数量
  • ​T​​、​​E​​ 出现频率最高
  • 所以用一次点击电键的数量
  • 本质上是一棵霍夫曼树

编辑

  • 当时发射和接收全靠人
  • 什么叫长、什么叫短、什么叫断
  • 发送者控制发报速度
  • 接收者跟着这个发报速度
  • 现查表是来不及的
  • 需要熟悉
  • 摩斯电码码表
  • 常用缩写
  • 这摩斯电码是3进制的编码方式
  • 怎么变成ascii这种0101的二进制编码的呢?

总结

  • ASCII 由这样几类字符构成
  • 英文大写字符
  • 英文小写字符
  • 数字
  • 符号
  • 电报时代对于英文、数字的编码
  • 使用的是摩斯电码

编辑

  • 这摩斯电码是3进制的编码方式
  • 长短空

[oeasy]python0018_ ASCII_字符分布_数字_大小写字母_符号_黑暗森林的更多相关文章

  1. 判断CString字符串中各位是数字,大小写字母,符号,汉字.xml

    pre{ line-height:1; color:#1e1e1e; background-color:#e9e9ff; font-size:16px;}.sysFunc{color:#627cf6; ...

  2. validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符

    //校验密码是否含有空格 jQuery.validator.addMethod("notblank", function(value, element) { var pwdblan ...

  3. 利用C语言识别用户输入字符并且输出该字符ASCII码值(大小写字母篇)(含思路)

    要求:从键盘输入一个字符,如果输入字符的是小写英文字母,则将其转换为大写英文字母,然后将转换后的英文字母及其ASCII码值输出到屏幕上,如果输入的是其他字符,则不转换并且直接将它及其ASCII码值输出 ...

  4. javascript中怎样验证密码是否含有特殊符号、数字、大小写字母,长度是否大于6小于12

    今天在温习了一下以前学过的知识,一般常用验证密码是通过正则表达式或是通过ASCII 一.用AscII码来验证

  5. PowerDesigner的CDM模型将低驼峰命名法则的每个大写字母前加_符

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...

  6. PHP中生成随机字符串,数字+大小写字母随机组合

    简单的生成随机字符串: /* * 生成随机字符串 * * $length 字符串长度 */ function random_str($length) { // 密码字符集,可任意添加你需要的字符 $c ...

  7. https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL_转

    转自:https 单向双向认证说明_数字证书, 数字签名, SSL(TLS) , SASL 因为项目中要用到TLS + SASL 来做安全认证层. 所以看了一些网上的资料, 这里做一个总结. 1. 首 ...

  8. cb19a_c++_只适合string类型的操作_提取_追加_替换

    *cb19a_c++_只适合string类型的操作_提取_追加_替换三个substr重载函数-获取一个字符串的一部分六个append重载函数-追加字符十个replace重载函数-替换更换 重载函数越多 ...

  9. HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)

    正则表达式1 <td><asp:TextBox ID="TextBox_username" Width="250" runat="s ...

  10. java画图程序_图片用字母画出来_源码发布_版本二

    在上一个版本:java画图程序_图片用字母画出来_源码发布 基础上,增加了图片同比例缩放,使得大像素图片可以很好地显示画在Notepad++中. 项目结构: 运行效果1: 原图:http://imag ...

随机推荐

  1. 更改wsl中系统的安装位置

    wsl默认安装位置是C盘,众所周知C盘总是不够用的,所以才有了把wsl的系统迁移到其它位置的需求.官网文档 首先查看所有分发版本 wsl -l --all -v 导出分发版为tar文件到D盘 wsl ...

  2. MindSponge分子动力学模拟——多路径分子模拟(2024.05)

    技术背景 在前面的MindSponge教程系列博客中,我们已经介绍过MindSponge分子动力学模拟框架的基础功能使用方法,例如MindSponge的安装与使用.定义分子系统.计算单点能和迭代器等等 ...

  3. Flutter(九)Json序列化与反序列化(转Model)

    在日常开发中JSON的序列化与反序列化是一个常见的操作:而Dart语言不支持反射,运行时反射会影响Dart的tree shaking(摇树优化),tree shaking可以"抖掉" ...

  4. Windows平台git clone文件路径太长报错

    问题描述 在Windows下拉取一些比较大的开源项目经常会提示文件路径太长(filename too long),然后死活都不成功 解决办法 1.配置git git config --system c ...

  5. numpy基础--用于数组的文件输入输出

    以下代码的前提:import numpy as np numpy能够读写磁盘上的文本数据或二进制数据. 1 将数组以二进制格式保存到磁盘 np.save和np.load是读写磁盘数组数据的两个主要函数 ...

  6. css做多列瀑布流

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  7. idea 中的 jrebel

    1.打开idea设置 ,下载 jrebel 2搜索下载jrebel 3.重启之后,在右下角有个弹窗,这时候选择enable,然后右边的侧边栏工具会弹出一个界面,总共应该有4步,第一步是展开的,点击蓝色 ...

  8. 增补博客 第七篇 python 比较不同Python图形处理库或图像处理库的异同点

    OpenCV.Pillow 和 scikit image OpenCV(OpenCV 是一个强大的计算机视觉库,它提供了各种图像处理和计算机视觉算法的实现,可以处理各种图像和视频数据. 异同点 跨平台 ...

  9. Java邮件发送解决ssl javax.mail实现方式

    package test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.activation.DataH ...

  10. FFmpeg GL-transition转场的简单使用体验

    写在前面 最近在处理视频,遇到两个视频之间的转场用原生的 xfade写起来很痛苦,实现成本高,难度大:我这里主要用的FFmpeg,就想找一个插件专门干转场这个事:搜索了一翻后找到 GL-transit ...