成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:3日期: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 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一本一道久久综合狠狠老精东影业 | 悠悠色在线精品| 91视频.com| 久久综合久久99| aaa欧美大片| 国产校园另类小说区| 色综合咪咪久久| 国产亚洲欧美中文| 欧美日韩精品综合| 国产欧美一区二区三区鸳鸯浴| 91香蕉国产在线观看软件| 久久久综合视频| 99久久免费视频.com| 久久这里只有精品首页| 91视频免费播放| 国产日韩欧美激情| 国内精品99| 亚洲欧美激情一区二区| 99av国产精品欲麻豆| 亚洲一区二区3| 老牛嫩草一区二区三区日本 | 国产精品高潮呻吟久久| 一区二区亚洲| 亚洲第一在线综合网站| 一本色道久久综合狠狠躁的推荐| 免费人成精品欧美精品| 欧美亚洲免费在线一区| 国产精品一品视频| 欧美r级在线观看| 色综合久久综合网欧美综合网| 日本一区二区不卡视频| 99精品99久久久久久宅男| 亚洲国产乱码最新视频 | 欧洲精品视频在线观看| 国产麻豆精品95视频| 欧美成人性战久久| 91女人视频在线观看| 国产精品国产三级国产aⅴ无密码| 亚洲第一伊人| 午夜伦欧美伦电影理论片| 欧美三级电影网| 成人av网站大全| 国产精品乱码一区二三区小蝌蚪| 一区二区三区四区五区视频| 日韩中文字幕区一区有砖一区 | 日本亚洲最大的色成网站www| 欧美日韩久久一区| 成人午夜av影视| 亚洲色图欧洲色图婷婷| 久久精品盗摄| 久久电影网电视剧免费观看| 精品国产乱码久久久久久图片| 国产一在线精品一区在线观看| 亚洲午夜久久久久久久久久久 | 日韩电影在线一区二区三区| 8x8x8国产精品| www.成人网.com| 亚洲色图欧美偷拍| 色噜噜夜夜夜综合网| 成人午夜激情片| 亚洲天堂a在线| 在线视频中文字幕一区二区| 成人动漫在线一区| 亚洲美女免费在线| 欧美午夜精品一区二区蜜桃 | 色网站国产精品| 成人综合在线网站| 亚洲精品五月天| 欧美美女视频在线观看| 欧美日韩精品| 婷婷中文字幕综合| 精品国产在天天线2019| 国产亚洲福利| 成人自拍视频在线| 亚洲精品欧美二区三区中文字幕| 欧美亚州韩日在线看免费版国语版| 粉嫩aⅴ一区二区三区四区五区| 中文字幕一区日韩精品欧美| 欧美在线影院一区二区| 欧美成人一品| 石原莉奈在线亚洲二区| 精品国内片67194| 国产精品乱子乱xxxx| 国产成人综合在线播放| 亚洲私人黄色宅男| 欧美三片在线视频观看 | 国产成人欧美日韩在线电影| 最新高清无码专区| 欧美久久一区二区| 亚洲人体大胆视频| 国产精品99久久久久久有的能看| 日韩伦理电影网| 在线播放一区二区三区| 国精品一区二区三区| 极品少妇xxxx偷拍精品少妇| ...av二区三区久久精品| 欧美酷刑日本凌虐凌虐| 99精品免费视频| 成人一级黄色片| 天使萌一区二区三区免费观看| 国产网站一区二区| 欧美日韩国产首页| 国产精品推荐精品| 欧美一区二区视频在线| 精品一区二区三区日韩| 一区二区高清免费观看影视大全| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲精品欧美| 国产精品99久久久| 视频在线在亚洲| 国产精品美女久久久久高潮| 日韩一区二区免费在线观看| 久久综合九色| 亚洲国产日本| 91亚洲精品久久久蜜桃| 国产一区二区看久久| 天堂蜜桃一区二区三区| 椎名由奈av一区二区三区| 精品国产人成亚洲区| 欧美在线不卡一区| 国产一区二区高清| 欧美成人综合| 国产成人精品免费网站| 视频一区在线视频| 亚洲人成精品久久久久久| 欧美精品一区二区三区久久久| 欧美视频在线一区二区三区| 国产精品一区二区三区四区五区| 欧美日韩视频一区二区三区| 国产91精品久久久久久久网曝门| 男人的天堂久久精品| 亚洲一区av在线| 亚洲男人天堂一区| 国产精品天干天干在线综合| 久久久久久久久久电影| 日韩欧美在线1卡| 欧美日韩美女一区二区| 色哟哟在线观看一区二区三区| 国产三区二区一区久久| 国产精品二区在线观看| 91免费小视频| 成人国产一区二区三区精品| 国内不卡的二区三区中文字幕| 首页国产欧美久久| 亚洲综合激情另类小说区| 欧美高清在线视频| 久久精品男人的天堂| 精品国产乱码久久久久久1区2区| 5月丁香婷婷综合| 欧美午夜影院一区| 色狠狠色狠狠综合| 久久久久久久久久码影片| 亚洲最新在线| 黑丝一区二区| 国产一区日韩欧美| 欧美精品国产一区二区| 97久久超碰精品国产| 99精品视频在线观看| bt7086福利一区国产| 成人av午夜影院| 成人免费视频一区| 粉嫩13p一区二区三区| 高清成人免费视频| 国产一区二区三区美女| 韩国av一区二区三区| 精品亚洲成a人在线观看| 麻豆精品国产91久久久久久| 日本视频一区二区| 日韩和欧美一区二区| 日韩成人精品在线观看| 婷婷开心激情综合| 日本不卡一区二区| 美国毛片一区二区三区| 黄色资源网久久资源365| 久久 天天综合| 国产一区二区看久久| 国产精品系列在线观看| 粉嫩av亚洲一区二区图片| 成人av在线一区二区三区| www.色精品| 亚洲欧美一级二级三级| 国产精品国产一区二区| 亚洲午夜极品| 最新成人av网站| 国产日韩一区二区| 色婷婷综合在线| 欧美日韩精品系列| 欧美一级专区免费大片| 精品福利一区二区三区免费视频| 26uuu色噜噜精品一区| 久久精品亚洲一区二区三区浴池 | 亚洲免费观看高清完整版在线观看 | 美女爽到高潮91| 国内成+人亚洲+欧美+综合在线 | 蜜臀av性久久久久蜜臀av麻豆 | 91蜜桃视频在线| 永久久久久久| 免费看的黄色欧美网站| 欧美日韩一卡二卡三卡| 欧美高清视频不卡网|