最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

[oeasy]python0019_ 打包和解包_struct_pack_unpack

2022-11-23 10:32 作者:oeasy  | 我要投稿

打包和解包

回憶上次內(nèi)容

  • ASCII 由這樣幾類字符構成

    • 英文大寫字符

    • 英文小寫字符

    • 數(shù)字

    • 符號

  • 電報時代對于英文、數(shù)字的編碼

    • 使用的是摩斯電碼

  • 這摩斯電碼是3進制的編碼方式

    • 長短空

  • 怎么演化成ascii這種0101的二進制編碼的呢???

回到 ASCII 碼

  • 電報傳過來的信號需要記錄下來

    • 于是有了電傳打字機(tele-typewriter)

    • 電傳打字機需要統(tǒng)一的編碼字母和數(shù)字

  • ASCII的第一個商業(yè)用途

    • 是作為一個七位電傳打字機(tele-typewriter)代碼

  • 要把滴、答、停的電報信號

    • 變成0和1的二進制信號

ASCII的演化(evolve)

  • 1960年10月6日

    • 現(xiàn)為美國國家標準協(xié)會

    • American National Standards Institute

    • 簡稱ANSI

    • 美國標準協(xié)會(ASA)X3的首次會議

    • ASCII標準的工作開始了

    • 美國標準協(xié)會

    • 開始敲定ASCII具體編碼

  • 貝爾公司主要經(jīng)營電報電話

編碼來源

  • 第一次(ASA X3.4-1963)就明確

    • 大小寫字母之間只差一個位

    • 這很重要

  • 否則錯誤編碼一旦成為標準

    • 就都廢掉了

    • 所有應用這種錯誤編碼的文件

  • 我想把所有 ASCII 字符 0-127 全都打出來

    • 可以么?

回憶show.py

  • 回憶編寫show.py

for n in range(0xff): ? ?print(chr(n),end="") ? ?if n % 16 == 0: ? ? ? ?print()

  • 確實可以出來

  • 這輸出靠的是

    • chr

    • 把序號轉(zhuǎn)化成字符的函數(shù)

  • 但是沒有看到0

    • 理論上在1之前

    • 仿佛被黑暗森林所吞沒

  • 我能否將字節(jié)解碼(decode)來干這個事?

struct

  • 首先是要獲得從0到127的字節(jié)狀態(tài)

  • struct 是一個包(module)

    • 導入struct包

  • struct是結(jié)構的意思

    • 來自于c里面常用類型的存儲結(jié)構

    • 這個struct怎么用呢?

pack

  • 把數(shù)字變成字節(jié)的形態(tài)

    • 把0x61這個數(shù)字變成字節(jié)的形態(tài)

  • "a" 不是字符嗎???

    • 怎么成了字節(jié)了?

字節(jié)表示法

  • 注意細節(jié)

  • 注意"a"前面還有一個b

    • "a"是字符

    • b"a" 是字節(jié)

  • 這兩類型完全不同

  • 字節(jié)b"a"是什么呢?

字節(jié)形態(tài)

  • 字節(jié)狀態(tài)可以用兩個16進制數(shù)來表示

    • 相當于b"\x61"

    • b"a"

  • b"a" 和 b"\x61" 是同樣的一個字節(jié)

    • 就是字符"a"在字節(jié)里的樣子

  • 為了清楚起見

    • 把b"\x61"表示為b"a"

    • 這樣也就直接看到了字符??

    • 剛好ord("a") 就是 0x61

  • 如何理解struct.pack呢?

封包pack

  • 按要求把東西封進規(guī)定的封裝里面

  • 把數(shù)字封在1個Byte里面

    • 觀察他的字節(jié)狀態(tài)

遍歷

import structfor n in range(0,128): ? ?b = struct.pack("b",n) ? ?print(b,end=",")

  • 把從0-127的數(shù)字都封到字節(jié)里面

  • 可以把數(shù)字轉(zhuǎn)化成字節(jié)狀態(tài)

    • 然后可以再把字節(jié)解碼了

遍歷結(jié)果

  • 好多的字節(jié)呀~??

  • 從字節(jié)狀態(tài)可以看到已經(jīng)有

    • 這里很明顯能看到0

    • 還有0前面的一堆符號

    • 0、1、2、3

    • A、B、C

    • a、b、c

  • 還有

    • \r、\n、\t

    • 這是啥意思???

    • 怎么還能有兩個字符呢?

    • 不管他

  • 先加上換行

換行

  • 從0數(shù)到7

    • 換1行

    • 再從0數(shù)到7

  • 隱約看到了ascii碼的結(jié)構

    • 我想看字符狀態(tài)

    • 我不想看字節(jié)狀態(tài)呢

  • 需要對字節(jié)狀態(tài)解碼(decode)

    • struct.unpack

    • 也就是解包

解包

  • 這又是一圈

    • pack

    • unpack

  • 解包出來是序號

  • 先把0-127的數(shù)字都變成字節(jié)

封包再解包

import structfor n in range(0,127): ? ?b = struct.pack("b",n) ? ?c = struct.unpack("b",b)[0] ? ?print(chr(c),end="") ? ?if n % 16 == 0: ? ? ? ?print()

  • 依然要面對黑暗森林

封包再解碼

import struct

for n in range(0,127): ?

?????b = struct.pack("b",n) ??

???? s = b.decode("ascii") ??

???? print(s,end="")?

???? if n % 16 == 0: ? ? ??

?????????? print()

  • 運行一下

  • 上面那片依然是全黑的?

  • 和原來chr方法得到的結(jié)果差不多

  • 但是沒有看到字符0

    • 仿佛被上面那片黑暗森林所吞沒

    • 這可真可怕!

  • 我們先去總結(jié)一下吧

總結(jié)

  • struct包可以讓我們使用封包格式

    • 遍歷了一次ascii碼

    • pack函數(shù)就是封包

    • unpack函數(shù)就是解封

    • 把數(shù)字封包到字節(jié)里

    • 我們通過封到不同字節(jié)的數(shù)字

  • 還是有那片黑色的區(qū)域

    • 好像是一片黑暗森林!

    • 那里面到底有些什么秘密???

  • 我們下次向黑暗森林區(qū)域進發(fā)?。??

  • 去準備行裝吧????

  • 藍橋->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


[oeasy]python0019_ 打包和解包_struct_pack_unpack的評論 (共 條)

分享到微博請遵守國家法律
涟源市| 分宜县| 蒙阴县| 新竹县| 鄂温| 壤塘县| 北流市| 舞阳县| 六安市| 彩票| 眉山市| 淮南市| 吴桥县| 元朗区| 广宁县| 鄂托克前旗| 南乐县| 河间市| 自贡市| 托克托县| 普定县| 法库县| 扶绥县| 广宁县| 防城港市| 大名县| 南阳市| 陆河县| 栾城县| 沅陵县| 托里县| 巴彦县| 通许县| 柞水县| 汝阳县| 泰宁县| 宁远县| 镇康县| 长白| 泊头市| 凤翔县|