ASCII 碼錶回憶上次內容
ord(c)和chr(i)
ord 通過 字符 找到對應的 數字
chr 通過 數字 找到對應的 字符
這是倆函數
這倆函數是一對,相反相成的⚖️
字符 的本質是 數字
字符都對應着一些數字
a 對應 97
b 對應 98
c 對應 99
都連號好像應該是天經地義的?
為什么小寫a從97開始?
但除了小寫字母之外還有很多字符
他們都是如何分布的呢?🤔
小寫字母#輸出a,b,cord("a")ord("b")ord("c")#輸出a的相對序號ord("a")-ord("a")#輸出z-a的數字差距,相對序號ord("z")-ord("a")
a、b、c 這些字符是挨着的
正好從0到25,總共26個🔢
對應數字也是挨着的
編碼規律
從 a-z 應該都是挨着的
26 個英文字母
為什麼是從 97 開始?
應該還有別的字符
低頭看一下鍵盤
除了小寫字母之外
大寫字母
數字
符號
大概有多少個字符呢?
字符全排列
每一個字符都會對應一個序號
序號用二進制的方式存在字節(byte)中
一個字節(byte)總有8位(bit)
每一位(bit)是一個二進制(binary)數字(digit)
從 8個0 到 8個1 相當於
從 0 到 255
我想要
把所有可能的序號對應的字符都數一遍
可行麼?
遍歷範圍for i in range(2 ** 8): print(i,end=",")
遍歷範圍是[0, 28)
也就是[0, 256)
前閉後開
不包含256
我們先把 從0到255 挨排兒捋一遍
如何通過序號找到對應的字符呢?
對應的字符
通過數字找到對應的字符是chr
for n in range(255): print(chr(n),end="") if n % 16 == 0: print()
print(chr(n),end="")
結束時什麼也不輸出
不輸出默認的換行
輸出n的字符狀態
chr(n)
end=""
if n % 16 == 0:
print()
如果n能被16整除
那麼輸出換行
結果如何呢?
結果
字母和數字還是挺完整的
這套對應關係有沒有個名字呢?
ASCII 碼錶
當時美國的工程師定義了一套編碼規則
American Standard Code for Information Interchange
ASCII
美國信息交換標準代碼
這建立起了 字符 和 二進制01 的 映射關係
面對同一個二進制數 01010101
就會映射到不同的字符
人們看到不同的字符就認為是亂碼
字符 和 二進制數 的 映射關係 如果不一致
這套ascii標準在各種計算機系統中需要統一
否則無法通信
這個 ASCII 什麼時候開始有的呢?
初現
1967 年的時候就有了最初這個 ASCII 碼錶🔡
低電平表示 0
高電平表示 1
電子計算機中所有的數據都是 0 和 1
當時計算機
先是由美國國家標準學會制定
(American National Standard Institute , ANSI )
最初是美國的國家標準
被稱作美國信息交換標準代碼
美國之外的國家如何編碼基本字符呢?
國際化
後來是國際標準化組織定為國際標準ISO
International Organization for Standardization a.k.a. ISO
稱為 ISO 646 標準
最後一次更新則是在 1986 年
到目前為止共定義了 128 個字符
能否完整系統地看到整個ascii碼錶的對應關係呢?
ascii
我們先來下個ascii程序
sudo apt install ascii
上面的命令可以安裝ascii這個應用
使用ascii
每一字符有三個部分組成
Dec 對應的是 10 進制數
Hex 對應的是 16 進制數
最後一列 對應的是 具體字符或功能
字符包括
控制
符號
英文大寫字母
英文小寫字母
這樣就把各種字符和一個二進制數字對應起來了
解碼 ASCII
我們找到小寫的a
8位2進制數
也就是8位(0或者1)
這個小寫的 a 在電腦中存儲的時候
對應着一個字節
到底是多少呢?
先沿着下圖中1的方向
向上找到110
這是他的高三位
765位
再沿着2的方向
在前面加一個0
得到(01100001)2進制
向左找到0001
這是他的低四位
4321位
總結
這次我們了解了ASCII碼錶
American Standard Code for Information Interchange
ASCII 碼錶就是
美國信息交換標準代碼
ASCII 碼錶範圍
數字的編碼減去 0x30 正好得到數字本身
0x30-0x39 這個範圍是 數字
0x41-0x5A 這個範圍是 大 寫字母
0x61-0x7A 這個範圍是 小 寫字母
0x20-0x7F 之間各處零散排布着各種符號
字符在計算機當中是用二進制方式存儲的
我們現在可以得到字符的序號
但是能通過字符序號
得到字符的二進制形態麼?🤔
我們下次再說👋
藍橋->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