close

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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()