日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python基础教程— Struct模块

發布時間:2025/3/20 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础教程— Struct模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

struct模塊提供了用于在字節字符串和Python原生數據類型之間轉換函數,比如數字和字符串。

該模塊作用是完成Python數值和C語言結構體的Python字符串形式間的轉換。
這可以用于處理存儲在文件中或從網絡連接中存儲的二進制數據,以及其他數據源。

1. 模塊函數和Struct類

它除了提供一個Struct類之外,還有許多模塊級的函數用于處理結構化的值。這里有個格式符(Format specifiers)的概念,是指從字符串格式轉換為已編譯的表示形式,類似于正則表達式的處理方式。通常實例化Struct類,調用類方法來完成轉換,比直接調用模塊函數有效的多。下面的例子都是使用Struct類。

2. Packing(打包)和Unpacking(解包)

Struct支持將數據packing(打包)成字符串,并能從字符串中逆向unpacking(解壓)出數據。

在本例中,格式指定器(specifier)需要一個整型或長整型,一個兩個字節的string,和一個浮點數。格式符中的空格用于分隔各個指示器(indicators),在編譯格式時會被忽略。

import structimport binasciivalues = (1, 'ab'.encode('utf-8'), 2.7) s = struct.Struct('I 2s f') packed_data = s.pack(*values)print('原始值:', values) print('格式符:', s.format) print('占用字節:', s.size) print('打包結果:', binascii.hexlify(packed_data))# output 原始值: (1, b'ab', 2.7) 格式符: b'I 2s f' 占用字節: 12 打包結果: b'0100000061620000cdcc2c40'

這個示例將打包的值轉換為十六進制字節序列,用binascii.hexlify()方法打印出來。

使用unpack()方法解包。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import struct import binasciipacked_data = binascii.unhexlify(b'0100000061620000cdcc2c40')s = struct.Struct('I 2s f') unpacked_data = s.unpack(packed_data) print('解包結果:', unpacked_data)# output 解包結果: (1, b'ab', 2.700000047683716)

將打包的值傳給unpack(),基本上返回相同的值(浮點數會有差異)。

3. 字節順序/大小/對齊

默認情況下,pack是使用本地C庫的字節順序來編碼的。格式化字符串的第一個字符可以用來表示填充數據的字節順序、大小和對齊方式,如下表所描述的:

如果格式符中沒有設置這些,那么默認將使用 @。

本地字節順序是指字節順序是由當前主機系統決定。比如:Intel x86和AMD64(x86-64)使用小字節序; Motorola 68000和 PowerPC G5使用大字節序。ARM和Intel安騰支持切換字節序。可以使用sys.byteorder查看當前系統的字節順序。

本地大小(Size)和對齊(Alignment)是由c編譯器的sizeof表達式確定的。它與本地字節順序對應。

標準大小由格式符確定,下面會講各個格式的標準大小。

示例:

import struct import binasciivalues = (1, 'ab'.encode('utf-8'), 2.7) print('原始值 : ', values)endianness = [('@', 'native, native'),('=', 'native, standard'),('<', 'little-endian'),('>', 'big-endian'),('!', 'network'), ]for code, name in endianness:s = struct.Struct(code + ' I 2s f')packed_data = s.pack(*values)print()print('格式符 : ', s.format, 'for', name)print('占用字節: ', s.size)print('打包結果: ', binascii.hexlify(packed_data))print('解包結果: ', s.unpack(packed_data))# output 原始值 : (1, b'ab', 2.7)格式符 : b'@ I 2s f' for native, native 占用字節: 12 打包結果: b'0100000061620000cdcc2c40' 解包結果: (1, b'ab', 2.700000047683716)格式符 : b'= I 2s f' for native, standard 占用字節: 10 打包結果: b'010000006162cdcc2c40' 解包結果: (1, b'ab', 2.700000047683716)格式符 : b'< I 2s f' for little-endian 占用字節: 10 打包結果: b'010000006162cdcc2c40' 解包結果: (1, b'ab', 2.700000047683716)格式符 : b'> I 2s f' for big-endian 占用字節: 10 打包結果: b'000000016162402ccccd' 解包結果: (1, b'ab', 2.700000047683716)格式符 : b'! I 2s f' for network 占用字節: 10 打包結果: b'000000016162402ccccd' 解包結果: (1, b'ab', 2.700000047683716)

4. 格式符

格式符對照表如下:

5. 緩沖區

將數據打包成二進制通常是用在對性能要求很高的場景。

在這類場景中可以通過避免為每個打包結構分配新緩沖區的開銷來優化。

pack_into()和unpack_from()方法支持直接寫入預先分配的緩沖區。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import array import binascii import ctypes import structs = struct.Struct('I 2s f') values = (1, 'ab'.encode('utf-8'), 2.7) print('原始值:', values)print() print('使用ctypes模塊string buffer')b = ctypes.create_string_buffer(s.size) print('原始buffer :', binascii.hexlify(b.raw)) s.pack_into(b, 0, *values) print('打包結果寫入 :', binascii.hexlify(b.raw)) print('解包 :', s.unpack_from(b, 0))print() print('使用array模塊')a = array.array('b', b'\0' * s.size) print('原始值 :', binascii.hexlify(a)) s.pack_into(a, 0, *values) print('打包寫入 :', binascii.hexlify(a)) print('解包 :', s.unpack_from(a, 0))# output 原始值: (1, b'ab', 2.7)使用ctypes模塊string buffer 原始buffer : b'000000000000000000000000' 打包結果寫入 : b'0100000061620000cdcc2c40' 解包 : (1, b'ab', 2.700000047683716)使用array模塊 原始值 : b'000000000000000000000000' 打包寫入 : b'0100000061620000cdcc2c40' 解包 : (1, b'ab', 2.700000047683716)

總結

以上是生活随笔為你收集整理的Python基础教程— Struct模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜丁香网 | 亚洲hhh | 99视频网址 | 人妻av一区二区 | 天天撸天天射 | 婷婷亚洲综合五月天小说 | 黄色小说在线观看视频 | 91av在线免费观看 | 777亚洲 | 久久久精品毛片 | 黄色免费在线播放 | 国产又粗又大又硬 | 色综合天天综合 | 欧美另类专区 | 免费污网站在线观看 | 欧美性受xxxx狂喷水 | 超碰网站在线 | a在线免费观看 | 另类亚洲色图 | 91av影视 | 寡妇av| 免费动漫av| 成人做爰100 | 日韩av在线不卡 | 色呦呦| 看日本毛片 | 精品国产1区2区 | 名校风暴在线观看免费高清完整 | 成人动漫视频在线观看 | 黄色免费入口 | 一级α片免费看刺激高潮视频 | 久啪视频 | 日本一二区视频 | 中文字幕一二三 | 男人网站在线观看 | 天天躁夜夜躁狠狠是什么心态 | 日韩黄色在线 | 国产调教视频在线观看 | 国产一区二区三区在线视频 | 亚洲一区黄色 | 国产乡下妇女做爰视频 | 好吊视频在线观看 | 黄色大毛片 | 国产欧美日韩中文字幕 | 韩国三级在线视频 | 亚洲一区二区三区综合 | 不卡一区二区在线 | 久久国产精品二区 | 手机在线成人av | 亚洲色图吧 | 日韩精品卡通动漫网站 | 国产高潮在线观看 | 免费av手机在线观看 | 337p粉嫩大胆噜噜噜亚瑟影院 | av福利网址 | 国产精品久久久久久久久免费 | 国产又黄又嫩又滑又白 | 麻豆影视在线免费观看 | 啪啪自拍| xvideos永久免费入口 | 欧美成免费 | 日本精品少妇 | 我想看一级黄色片 | 三级免费观看 | 亚洲国产精品成人午夜在线观看 | 天天综合天天做天天综合 | 伊人青草| 色爱AV综合网国产精品 | xx性欧美肥妇精品久久久久久 | 免费视频精品 | 欧美日韩一区二区三区四区五区 | 综合激情四射 | 91精品999 | 欧美日韩成人在线 | 日本人妻换人妻毛片 | 美女100%视频免费观看 | 成人免费短视频 | 操操操操操操操操操 | 国产精品久久久久久亚洲av | 尤物综合网 | 欧美激情在线免费 | 亚洲色图视频在线观看 | 亚洲AV成人无码网站天堂久久 | 裸体女视频 | 8mav在线| 欧美激情精品久久久久久蜜臀 | 无码少妇一区二区三区芒果 | 波多野结衣av一区二区全免费观看 | 91操操操 | 日老女人视频 | 香港三级日本三级韩国三级 | 亚洲第一视频网 | 亚洲精品乱码久久久久久久久久久久 | 九九午夜视频 | 无码人妻精品一区二区三区9厂 | 日韩精品一区二区三区视频在线观看 | 他揉捏她两乳不停呻吟动态图 | 涩涩精品 | 美女一区二区三区四区 |