[oeasy]python0015_十六進(jìn)制_hexadecimal_字節(jié)形態(tài)_hex函數(shù)
回憶上次內(nèi)容
上次數(shù)制可以轉(zhuǎn)化
binary
接收一個(gè)整數(shù)(int)
得到一個(gè)二進(jìn)制數(shù)形式的字符串
bin(n)可以把數(shù)字轉(zhuǎn)化為
2進(jìn)制

數(shù)字在計(jì)算機(jī)中是用二進(jìn)制存儲的
但是展示給我們的時(shí)候用的是十進(jìn)制

也就是0-9這10個(gè)字符的形式
都說字節(jié)是計(jì)算機(jī)存儲的最小單位
這些數(shù)字在字節(jié)里面長什么樣子呢???
字節(jié)
首先明確字節(jié)長什么樣子?

1 個(gè) 字節(jié)(byte)
正好 8 個(gè) 位(bit)

如果我們用一個(gè)數(shù)字來表示一個(gè)字節(jié)的話
需要表示[0,28-1]
至少需要3位數(shù)字
我想要用2位數(shù)字得到字節(jié)狀態(tài)
有可能嗎?
一分為二
把8位分成兩塊
前4位
后4位
每一塊是從多少到多少呢?

4位都是0
數(shù)值為0
4位都是1
數(shù)值為15

從0到15總共16個(gè)數(shù)字
所以我們需要的是16進(jìn)制
16進(jìn)制
進(jìn)入 python3 幫助模式

我們可以查詢 hex
hex 對應(yīng) hexadecimal 十六進(jìn)制
help(hex)

動手
#得到a的序號ord("a")#輸出97對應(yīng)的十六進(jìn)制形式hex(97)#找到a對應(yīng)的數(shù)字對應(yīng)的十六進(jìn)制形式hex(ord("a"))
0x61
就是十六進(jìn)制的61
0x
是十六進(jìn)制的前綴標(biāo)志正如
0b
是 2 進(jìn)制數(shù)的前綴標(biāo)志

那這個(gè)0x61是怎么得到的呢?
16進(jìn)制數(shù)
字符
a
對應(yīng)(
97
) ?10進(jìn)制數(shù)
(
0x61
)16進(jìn)制數(shù)

4 位二進(jìn)制數(shù) 對應(yīng) 1位 十六進(jìn)制數(shù)
8 為二進(jìn)制數(shù) 對應(yīng) 2位 十六進(jìn)制數(shù)
8 位(bit) 剛好一個(gè)字節(jié)(byte)

我們會用 hex、bin 把 10 進(jìn)制數(shù)轉(zhuǎn)化為
十六進(jìn)制形式、二進(jìn)制形式
不過16進(jìn)制怎么能出現(xiàn)16個(gè)數(shù)字呢?
回憶

16進(jìn)制有多少根手指呢?
十六進(jìn)制
16進(jìn)制需要16根手指

這有點(diǎn)可怕?。。。?/p>
我們真的需要16根手指頭嗎?
會做噩夢的...
不過落實(shí)到計(jì)數(shù)上...
不怕
我們?yōu)槭裁从?0進(jìn)制
因?yàn)槲覀冇?0根手指

數(shù)樹的結(jié)果和手指頭的數(shù)量沒有關(guān)系
2 根 手指頭
10 根 手指頭
16 根 手指
都不會影響數(shù)出來的樹的數(shù)量
樹還是那么多樹
只是表示的方式不同
可以有比9大的數(shù)字嗎?
超出我們對于數(shù)字的認(rèn)知了
具體怎么表示?
比9大的數(shù)字

可以把所有的數(shù)字列出來嗎?
所有16進(jìn)制數(shù)字

那些字母對應(yīng)這些超過9的數(shù)字呢?
16進(jìn)制
在ascii編碼中的小寫字母
a
對應(yīng)著(
97
)10進(jìn)制數(shù)
對應(yīng)著(
0b1100001
)2進(jìn)制數(shù)
對應(yīng)著(
0x61
)16進(jìn)制數(shù)

我們滿16的時(shí)候才進(jìn)1
從0到9都用原來的符號
后面沒有符號了
用a到f
"j" 這個(gè)字符對應(yīng)
(
6a
)16進(jìn)制數(shù)
這怎么理解?
對應(yīng)關(guān)系
1個(gè)16進(jìn)制數(shù)(hexadecimal)有4位(bit)
1個(gè)字節(jié)(byte)有8位(bit)

1個(gè)字節(jié)
正好對應(yīng)2位16進(jìn)制數(shù)
可以用vim看到
abcd這些字母的字節(jié)狀態(tài)嗎?
查看狀態(tài)
vi ascii.txt
:%!xxd 將文件轉(zhuǎn)化為字節(jié)形態(tài)

可以看到文件是用
2進(jìn)制
方式存儲的0x61 - a
0x62 - b
0x63 - c
0x64 - d
最后加了個(gè)0a字節(jié)

總共5個(gè)字節(jié)
那可以看看我們的py文件么?
py文件
再寫經(jīng)典
這段特別熟
仿佛寫過2萬多遍
可以看到這個(gè)純文本py文件的字節(jié)狀態(tài)嗎?
是真的30個(gè)字節(jié)嗎?
字節(jié)狀態(tài)
雖然只有兩行
不過能夠看到字符和字節(jié)之間的關(guān)系
差2個(gè)字節(jié)到達(dá)(20)16
也就是0x20-2
確實(shí)是0x1e
就是30
我們看看稍微大一點(diǎn)的東西
安徒生童話
git clone https://github.com/overmind1980/oeasy-python-tutorial.git
下載之后
這個(gè)純文本318K
打開之后什么樣呢?
打開文本文檔
這文檔就是純文本的
如何轉(zhuǎn)化為字節(jié)形態(tài)呢?
xxd
xxd 可以查看文件的二進(jìn)制形態(tài)
dump的本意是(傾倒垃圾)
這里指的是轉(zhuǎn)儲
把文件轉(zhuǎn)儲為16進(jìn)制形式匯編代碼形式
:xxd –r
可以還原回去 ??:%!xxd
轉(zhuǎn)成字節(jié)形態(tài):%!xxd –r
轉(zhuǎn)回文本形態(tài)反復(fù)橫跳...
在vim中
轉(zhuǎn)化為字節(jié)模式
:%!xxd
可以想象txt文本
總共318K個(gè)字符
甚至能想到每個(gè)字符的狀態(tài)
十六進(jìn)制數(shù)剛好很適合輸出字節(jié)狀態(tài)
為什么hex對應(yīng)著16進(jìn)制呢?
hexa-decimal
hexa - 對應(yīng)著六
其實(shí)就是六的北方方言發(fā)音落實(shí)到字母的狀態(tài)
hexa 我們理解了
對應(yīng)著 six
那么decimal如何理解呢?
decimal
deci- 對應(yīng)著十分之一
decigram 十分之一克:deci(十分之一)+gram(克)→decigram(十分之一克)
decimeter 十分之一米:deci(十分之一)+meter(米)→decimeter (十分之一米)
decilitre 十分之一升:deci(十分之一)+liter/litre(升)→decilitre( 十分之一升)
decibel 十分之一貝爾:deci(十分之一)+bel (升)→decibel( 十分之一升) db 分貝
這些詞根來自于什么呢?
decimal
這些單詞開始于原始印歐語詞根*dekm
隱約可感覺到越往北邊鼻音越重
decennium 十分之一世紀(jì)
似不似泳意喪頭
嗯吶
可能是因?yàn)樾枰L的鼻腔
空氣經(jīng)過更長時(shí)間的加溫過程來潤肺
鼻腔共鳴引發(fā)的共振也可以讓血液比較容易上頭
dec+ade 十年
december(古羅馬歷的十月)
類似的還有
decagon十角形(deca+gon角)
decameter十米(deca+meter米)
落實(shí)到函數(shù)就是hex()
怎么用呢?
轉(zhuǎn)化回十進(jìn)制
和二進(jìn)制是相同的
二進(jìn)制是0b開頭
0 代表數(shù)字
b 代表二進(jìn)制(<span style="font-size:24px">
b
</span>inary)十六進(jìn)制是0x開頭
0 代表數(shù)字
h 代表十六進(jìn)制(he<span style="font-size:24px">
x
</span>adecimal)
總結(jié)
這次找到了字符和字節(jié)狀態(tài)之間的映射對應(yīng)關(guān)系
字符對應(yīng)著二進(jìn)制字節(jié)
二進(jìn)制字節(jié)也對應(yīng)著字符
這種字節(jié)狀態(tài)是用2位16進(jìn)制數(shù)來表示的
hex(n)可以把數(shù)字轉(zhuǎn)化為
16進(jìn)制
字符串hexadecimal
bin(n)可以把數(shù)字轉(zhuǎn)化為
2進(jìn)制
字符串integer
我們根據(jù)ascii中的字符序號
能夠把字符存儲進(jìn)計(jì)算機(jī)的字節(jié)當(dāng)中了
終于知道字符對應(yīng)的字節(jié)到底長啥樣了
但是說到底
為啥要把字符對應(yīng)成字節(jié)呢???
我們下次再說!??
藍(lán)橋->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