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

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

Python使用struct處理二進制(pack和unpack用法)

瀏覽:2日期:2022-07-05 16:29:37

有的時候需要用python處理二進制數據,比如,存取文件,socket操作時.這時候,可以使用python的struct模塊來完成.可以用 struct來處理c語言中的結構體.

struct模塊中最重要的三個函數是pack(), unpack(), calcsize()

# 按照給定的格式(fmt),把數據封裝成字符串(實際上是類似于c結構體的字節流)pack(fmt, v1, v2, ...) # 按照給定的格式(fmt)解析字節流string,返回解析出來的tupleunpack(fmt, string) # 計算給定的格式(fmt)占用多少字節的內存calcsize(fmt)

上述fmt中,支持的格式為:

FORMAT C TYPE PYTHON TYPE STANDARD SIZE NOTES x pad byte no value - - c char string of length 1 1 - b signed char integer 1 (3) B unsigned char integer 1 (3) ? _Bool bool 1 (1) h short integer 2 (3) H unsigned short integer 2 (3) i int integer 4 (3) I unsigned int integer 4 (3) l long integer 4 (3) - L unsigned long integer 4 (3) q long long integer 8 (2), (3) Q unsigned long long integer 8 (2), (3) f float float 4 (4) d double float 8 (4) s char[] string - - p char[] string - - P void * integer - (5), (3)

使用方法是放在fmt的第一個位置,就像’@5s6sif’

例子1:

結構體如下:

struct Header{ unsigned short id; char[4] tag; unsigned int version; unsigned int count;}

通過socket.recv接收到了一個上面的結構體數據,存在字符串s中,現在需要把它解析出來,可以使用unpack()函數:

import structid, tag, version, count = struct.unpack('!H4s2I', s)

上面的格式字符串中,!表示我們要使用網絡字節順序解析,因為我們的數據是從網絡中接收到的,在網絡上傳送的時候它是網絡字節順序的.后面的H表示 一個unsigned short的id,4s表示4字節長的字符串,2I表示有兩個unsigned int類型的數據.

就通過一個unpack,現在id, tag, version, count里已經保存好我們的信息了.

同樣,也可以很方便的把本地數據再pack成struct格式:

ss = struct.pack('!H4s2I', id, tag, version, count);

pack函數就把id, tag, version, count按照指定的格式轉換成了結構體Header,ss現在是一個字符串(實際上是類似于c結構體的字節流),可以通過 socket.send(ss)把這個字符串發送出去。

例子2:

import struct a=12.34# 將a變為二進制bytes=struct.pack(’i’,a)

此時bytes就是一個string字符串,字符串按字節同a的二進制存儲內容相同。

再進行反操作,現有二進制數據bytes,(其實就是字符串),將它反過來轉換成python的數據類型:

# 注意,unpack返回的是tuple !!a,=struct.unpack(’i’,bytes)

如果是由多個數據構成的,可以這樣:

a=’hello’b=’world!’c=2d=45.123

bytes=struct.pack(’5s6sif’,a,b,c,d)此時的bytes就是二進制形式的數據了,可以直接寫入文件比如 binfile.write(bytes)

然后,當我們需要時可以再讀出來,bytes=binfile.read()

再通過struct.unpack()解碼成python變量:

a,b,c,d=struct.unpack(’5s6sif’,bytes)

’5s6sif’這個叫做fmt,就是格式化字符串,由數字加字符構成,5s表示占5個字符的字符串,2i,表示2個整數等等,下面是可用的字符及類型,ctype表示可以與python中的類型一一對應。

注意:二進制文件處理時會碰到的問題

我們使用處理二進制文件時,需要用如下方法:

binfile=open(filepath,’rb’) #讀二進制文件 binfile=open(filepath,’wb’) #寫二進制文件

那么和binfile=open(filepath,’r’)的結果到底有何不同呢?

不同之處有兩個地方:

第一,使用’r’的時候如果碰到’0x1A’,就會視為文件結束,這就是EOF。使用’rb’則不存在這個問題。即,如果你用二進制寫入再用文本讀出的話,如果其中存在’0X1A’,就只會讀出文件的一部分。使用’rb’的時候會一直讀到文件末尾。

第二,對于字符串x=’abcndef’,我們可用len(x)得到它的長度為7,n我們稱之為換行符,實際上是’0X0A’。當我們用’w’即文本方式寫的時候,在windows平臺上會自動將’0X0A’變成兩個字符’0X0D’,’0X0A’,即文件長度實際上變成8.。當用’r’文本方式讀取時,又自動的轉換成原來的換行符。如果換成’wb’二進制方式來寫的話,則會保持一個字符不變,讀取時也是原樣讀取。所以如果用文本方式寫入,用二進制方式讀取的話,就要考慮這多出的一個字節了。’0X0D’又稱回車符。linux下不會變。因為linux只使用’0X0A’來表示換行。

以上就是Python使用struct處理二進制(pack和unpack用法)的詳細內容,更多關于python struct處理二進制的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 桂林腻子粉_内墙外墙抗裂砂浆腻子粉推荐广西鑫达涂料厂家供应 | 杰福伦_磁致伸缩位移传感器_线性位移传感器-意大利GEFRAN杰福伦-河南赉威液压科技有限公司 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 北京公寓出租网-北京酒店式公寓出租平台 | 贵州自考_贵州自学考试网 | 宝元数控系统|对刀仪厂家|东莞机器人控制系统|东莞安川伺服-【鑫天驰智能科技】 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 长沙网站建设制作「网站优化推广」-网页设计公司-速马科技官网 | 纳米二氧化硅,白炭黑,阴离子乳化剂-臻丽拾科技 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 广东教师资格网-广东教师资格证考试网 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 恒温振荡混匀器-微孔板振荡器厂家-多管涡旋混匀器厂家-合肥艾本森(www.17world.net) | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 赛默飞Thermo veritiproPCR仪|ProFlex3 x 32PCR系统|Countess3细胞计数仪|371|3111二氧化碳培养箱|Mirco17R|Mirco21R离心机|仟诺生物 | 台式核磁共振仪,玻璃软化点测定仪,旋转高温粘度计,测温锥和测温块-上海麟文仪器 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 「安徽双凯」自动售货机-无人售货机-成人用品-自动饮料食品零食售货机 | jrs高清nba(无插件)直播-jrs直播低调看直播-jrs直播nba-jrs直播 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 温州富欧金属封头-不锈钢封头厂家 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 洛阳永磁工业大吊扇研发生产-工厂通风降温解决方案提供商-中实洛阳环境科技有限公司 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | 清水-铝合金-建筑模板厂家-木模板价格-铝模板生产「五棵松」品牌 | 叉车电池-叉车电瓶-叉车蓄电池-铅酸蓄电池-电动叉车蓄电池生产厂家 | 水稻烘干机,小麦烘干机,大豆烘干机,玉米烘干机,粮食烘干机_巩义市锦华粮食烘干机械制造有限公司 水环真空泵厂家,2bv真空泵,2be真空泵-淄博真空设备厂 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 |