电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Python二進制數據結構Struct的具體使用

瀏覽:121日期:2022-06-16 14:37:46
目錄二進制數據結構Struct函數與Struct類打包解包字節序指示符緩沖區二進制數據結構Struct

在C/C++語言中,struct被稱為結構體。而在Python中,struct是一個專門的庫,用于處理字節串與原生Python數據結構類型之間的轉換。

本篇,將詳細介紹二進制數據結構struct的使用方式。

函數與Struct類

struct庫包含了一組處理結構值得模塊級函數,以及一個Struct類。格式指示符將由字符串格式轉換為一種編譯表示,這與處理正則表達式得方式類似。

這個轉換會耗費一些資源,所以創建一個Struct實例并再這個實例上調用方法時,只完成一次轉換,往往會更高效。

打包

Struct支持使用格式指示符將數據打包為字符串,另外支持從字符串解包數據,格式指示符由表示數據類型的字符串和可選的數量及字節序指示符構成。

下面,我們來打包一個元組,將其轉換為16進制字節序列,示例如下:

import structimport binasciivalues = (2, ’lyj’.encode(’UTF-8’), 3.8)s = struct.Struct(’I 3s f’)packed_data = s.pack(*values)print('原值:', values)print('格式指示符:', s.format)print('大小:', s.size, ’bytes’)print('打包值:', binascii.hexlify(packed_data))

運行之后,效果如下:

Python二進制數據結構Struct的具體使用

這里的格式指示符為“I 3s f”。前面介紹array數組時,我們已經列出過一個表格。其中I標識一個整型或長整型,3s表示3個字節字符串(lyj),f表示浮點數。

解包

struct庫使用unpack()可以從打包的表示數據中抽取數據,這里直接復制上面的打包值,進行測試。示例如下:

import structimport binasciipacked_data = binascii.unhexlify(b’020000006c796a0033337340’)s = struct.Struct(’I 3s f’)unpacked_data = s.unpack(packed_data)print('解包值:', unpacked_data)

運行之后,效果如下:

Python二進制數據結構Struct的具體使用

雖然使用unpack()解包基本會得到相同值,但浮點數的值有微小的差別。

字節序指示符

默認情況下,值會使用原生C庫的字節序(endianness)來編碼。Struct的字節序指示符如下表所示:

代碼 含義 @ 原生順序 = 原生標準 < 小端 > 大端 ! 網絡順序

示例如下:

import structimport binasciivalues = (2, ’lyj’.encode(’UTF-8’), 3.8)endianness = [ (’@’, ’原生順序’), (’=’, ’原生標準’), (’<’, ’小端’), (’>’, ’大端’), (’!’, ’網絡順序’),]for code, name in endianness: s = struct.Struct(code + ’ I 3s f’) packed_data = s.pack(*values) print('格式化字符串:', s.format, ’ for ’, name) print('大小:', s.size, ’bytes’) print('打包:', binascii.hexlify(packed_data)) print('解包:', s.unpack(packed_data))

運行之后,效果如下:

Python二進制數據結構Struct的具體使用

如果想改變字節序來編碼,如上面代碼所示,只需要改變格式串中提供一個顯式的字節序指令,就可以很容易地覆蓋這個默認選擇。

緩沖區

通常在強調性能的情況下或者向擴展模塊傳入或傳出數據時才會處理二進制打包數據。

為了避免為每個打包結構分配一個新緩沖區所帶來的開銷,通常情況下,我們使用pack_into()和unpack_from()方法支持直接寫入預分配的緩沖區。

示例如下:

import structimport binasciiimport ctypesimport arrayvalues = (2, ’lyj’.encode(’UTF-8’), 3.8)s = struct.Struct(’I 3s f’)print('原始值:', values)b = ctypes.create_string_buffer(s.size)print('打包之前(緩沖區的值):', binascii.hexlify(b.raw))s.pack_into(b, 0, *values)print('打包之后(緩沖區的值):', binascii.hexlify(b.raw))print('解包:', s.unpack_from(b, 0))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))

運行之后,效果如下:

Python二進制數據結構Struct的具體使用

這里通過兩種方式,創建緩沖區。其中size屬性用于指出緩沖區需要的大小。

到此這篇關于Pytho 二進制數據結構Struct的具體使用的文章就介紹到這了,更多相關Pytho 二進制數據結構Struct內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | MES系统-WMS系统-MES定制开发-制造执行MES解决方案-罗浮云计算 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 转向助力泵/水泵/发电机皮带轮生产厂家-锦州华一精工有限公司 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 北京浩云律师事务所-企业法律顾问_破产清算等公司法律服务 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 钢绞线万能材料试验机-全自动恒应力两用机-混凝土恒应力压力试验机-北京科达京威科技发展有限公司 | 南京和瑞包装有限公司| 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 海南在线 海南一家| 高柔性拖链电缆_卷筒电缆_耐磨耐折聚氨酯电缆-玖泰特种电缆 | 首页-浙江橙树网络技术有限公司| 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 口信网(kousing.com) - 行业资讯_行业展会_行业培训_行业资料 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | MES系统工业智能终端_生产管理看板/安灯/ESOP/静电监控_讯鹏科技 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 智慧消防-消防物联网系统云平台| 通用磨耗试验机-QUV耐候试验机|久宏实业百科 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 太原装修公司_山西整装家装设计_太原室内装潢软装_肖邦家居 | 蜗轮丝杆升降机-螺旋升降机-丝杠升降机厂家-润驰传动 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 不锈钢水箱厂家,不锈钢保温水箱-山东桑特供水设备 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 杭州荣奥家具有限公司-浙江办公家具,杭州办公家具厂 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 气体热式流量计-定量控制流量计(空气流量计厂家)-湖北南控仪表科技有限公司 | 精密光学实验平台-红外粉末压片机模具-天津博君 |