[oeasy]python0018_ ASCII_字符分布_數(shù)字_大小寫字母_符號_黑暗森林
打包和解包
回憶上次內(nèi)容
decode
就是解碼
解碼和編碼可以轉(zhuǎn)化
encode 編碼
decode 解碼
互為逆過程
大小寫字母之間序號全都相差(
32
)10進制

這是為什么呢???
差距
大寫字母和小寫字母
總是相差(
32
)10進制

從10進制角度看不清楚
我們從16進制的角度看看
16進制
正好是(
0x20
)16進制

為什么不多不少
就差 0x20 呢?
怎么那么寸呢???
轉(zhuǎn)化為2進制之后
恰好是1位(bit)
這是偶然的嗎?
ASCII 碼表趣事
其實最初相差的并不是 0x20
之前 ibm 的 EBCDIC 編碼也是這樣的

也相差一個2進制位

EBCDIC問題是字母不連續(xù)
i、j之間不直接相連
EBCDIC最終被ascii所淘汰
ASCII
ASCII字母是連續(xù)的
而且大小寫字母間
相差正好是 1個 二進制位
對應(yīng) b6 這個位
那為什么要差 1個 二進制位 呢?

有了這種對應(yīng)關(guān)系之后
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.
做大小寫不敏感的字符串查找就快多了
這個 0x20 發(fā)生在 1963 年 5 月
當(dāng)時的目的是
降低大小寫不敏感字符串匹配的難度
降低打字機鍵盤的構(gòu)造成本
如果搜索中遇到的是小寫字母
小寫就都變成大寫
不用查找對應(yīng)關(guān)系表匹配
修改1位之后
然后再觀察全大寫的情況下是否匹配
這就是大小寫字母的情況
0x41-0x5A
這個范圍是大寫字母0x61-0x7A
這個范圍是小寫字母除了大小寫字母之外
數(shù)字字符又是如何表示的呢?
ASCII 碼表范圍

0x30-0x39
這個范圍是數(shù)字Binary-Coded Decimal
數(shù)字的編碼減去
0x30
正好得到數(shù)字本身后四位剛好是BCD編碼模式

我們再來看看 ASCII 除了字母和數(shù)字還有什么?
各種符號
各種符號是不連續(xù)的

穿插在數(shù)字、字母周圍
sp 其實就是space(空格)
表格最左邊是什么呢?
ASCII
0x20-0x7F
之間有各種真實字符

0x00-0x1F
之間的東西是什么?具體含義目前還不知道
前兩列都是對應(yīng)多個字符的
ASCII中的字符本來英語里就有
怎么編碼的呢?
但是字符是英文字符、數(shù)字和標點
ASCII由來
ASCII碼是由電報代碼發(fā)展而來的

由貝爾數(shù)據(jù)服務(wù)公司推廣

電報碼不是摩斯電碼嗎?
摩斯電碼
更早之前確實是摩斯電碼
下圖是他的編碼表
分成長和短兩種信號,就是嘀和嗒

歡迎您有機會來看看oeasy電學(xué)、科學(xué)史那幾個系列
還記得encode/decode中的code么?
曾經(jīng)一度指的就是各種電報編碼匯編
后來統(tǒng)一到摩斯電碼
摩斯電碼通信規(guī)則
下圖是他的通信規(guī)則
三個斷確認本字符結(jié)束了
三個斷就是字符之間的分隔符
錄入狀態(tài)并不是 0、1 兩種狀態(tài)
而是長、短、暫停三種狀態(tài)

編碼的原則是什么呢?
效率問題
編碼的規(guī)則是常用的字符點擊次數(shù)少
T
、E
出現(xiàn)頻率最高所以用一次點擊電鍵的數(shù)量
按照字符出現(xiàn)概率分配對應(yīng)點擊數(shù)量
本質(zhì)上是一棵霍夫曼樹

當(dāng)時發(fā)射和接收全靠人
什么叫長、什么叫短、什么叫斷
發(fā)送者控制發(fā)報速度
摩斯電碼碼表
常用縮寫
接收者跟著這個發(fā)報速度
現(xiàn)查表是來不及的
需要熟悉
這摩斯電碼是3進制的編碼方式
怎么變成ascii這種0101的二進制編碼的呢?
總結(jié)
ASCII 由這樣幾類字符構(gòu)成
英文大寫字符
英文小寫字符
數(shù)字
符號
電報時代對于英文、數(shù)字的編碼
使用的是摩斯電碼

這摩斯電碼是3進制的編碼方式
長短空
怎么演化成ascii這種0101的二進制編碼的呢???
下次再說????
藍橋->https://www.lanqiao.cn/teacher/3584
github->https://github.com/overmind1980/oeasy-python-tutorial
gitee->https://gitee.com/overmind1980/oeasypython
視頻->https://www.bilibili.com/video/BV1CU4y1Z7gQ 作者:oeasy