国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中的pack和unpack的使用

2020-02-22 23:26:12
字體:
來源:轉載
供稿:網友

不同類型的語言支持不同的數(shù)據(jù)類型,比如 Go 有 int32、int64、uint32、uint64 等不同的數(shù)據(jù)類型,這些類型占用的字節(jié)大小不同,而同樣的數(shù)據(jù)類型在其他語言中比如 Python 中,又是完全不同的處理方式,比如 Python 的 int 既可以是有符號的,也可以是無符號的,這樣一來 Python 和 Go 在處理同樣大小的數(shù)字時存儲方式就有了差異。

除了語言之間的差別,不同的計算機硬件存儲數(shù)據(jù)的方式也有很大的差異,有的 32 bit 是一個 word,有的 64 bit 是一個 word,而且他們存儲數(shù)據(jù)的方式或多或少都有些差異。

當這些不同的語言以及不同的機器之間進行數(shù)據(jù)交換,比如通過 network 進行數(shù)據(jù)交換,他們需要對彼此發(fā)送和接受的字節(jié)流數(shù)據(jù)進行 pack 和 unpack 操作,以便數(shù)據(jù)可以正確的解析和存儲。

計算機如何存儲整型

可以把計算機的內存看做是一個很大的字節(jié)數(shù)組,一個字節(jié)包含 8 bit 信息可以表示 0-255 的無符號整型,以及 -128—127 的有符號整型。當存儲一個大于 8 bit 的值到內存時,這個值常常會被切分成多個 8 bit 的 segment 存儲在一個連續(xù)的內存空間,一個 segment 一個字節(jié)。有些處理器會把高位存儲在內存這個字節(jié)數(shù)組的頭部,把低位存儲在尾部,這種處理方式叫 big-endian ,有些處理器則相反,低位存儲在頭部,高位存儲在尾部,稱之為 little-endian 。

假設一個寄存器想要存儲 0x12345678 到內存中,big-endian 和 little-endian 分別存儲到內存 1000 的地址表示如下

address big-endian little-endian
1000 0x12 0x78
1001 0x34 0x56
1002 0x56 0x34
1003 0x78 0x12

計算機如何存儲 character

和存儲 number 的方式類似,character 通過一定的編碼格式進行編碼比如 unicode,然后以字節(jié)的方式存儲。

Python 中的 struct 模塊

Python 提供了三個與 pack 和 unpack 相關的函數(shù)

struct.pack(fmt, v1, v2, ...)struct.unpack(fmt, string)struct.calcsize(fmt)

第一個函數(shù) pack 負責將不同的變量打包在一起,成為一個字節(jié)字符串。

第二個函數(shù) unpack 將字節(jié)字符串解包成為變量。

第三個函數(shù) calsize 計算按照格式 fmt 打包的結果有多少個字節(jié)。

pack 操作

Pack 操作必須接受一個 template string 以及需要進行 pack 一組數(shù)據(jù),這就意味著 pack 處理操作 定長 的數(shù)據(jù)

import structa = struct.pack("2I3sI", 12, 34, "abc", 56)b = struct.unpack("2I3sI", a)print b            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 房产| 清镇市| 新丰县| 永仁县| 乐清市| 河源市| 岚皋县| 乐山市| 鄂州市| 冷水江市| 海丰县| 蒙自县| 水富县| 洱源县| 苍南县| 喀喇| 顺昌县| 自治县| 油尖旺区| 红桥区| 聂拉木县| 饶阳县| 石首市| 洪洞县| 会理县| 仲巴县| 吴川市| 荣昌县| 安阳市| 新宁县| 安多县| 台北市| 邵阳市| 永福县| 绥芬河市| 疏勒县| 大渡口区| 疏附县| 疏附县| 呼伦贝尔市| 梅河口市|