日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:21日期: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 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本麻豆一区二区三区视频| 成人av三级| 久久青草久久| 美女国产精品久久久| 欧美亚洲综合视频| 91九色综合| 国产日产一区| 青青草国产精品亚洲专区无| 欧美亚洲tv| 日本v片在线高清不卡在线观看| 中文字幕一区二区三区日韩精品 | 国产精品久久久久久久免费软件| 日本高清久久| 国产欧美一区二区三区米奇| 国产日韩一区| 久久一区视频| 精品亚洲精品| 日韩欧美自拍| 欧美特黄一区| 日韩黄色免费网站| 久久丁香四色| 欧美日韩国产观看视频| 久久裸体视频| 日韩视频一区| 日韩精品1区2区3区| 国产免费久久| 日韩影院二区| 视频在线观看一区二区三区| 日本午夜精品久久久久| 精品一区二区三区四区五区| 99热国内精品| 石原莉奈在线亚洲二区| 日韩激情一区二区| 国产精品天堂蜜av在线播放| 福利一区视频| 91精品1区| 国产探花在线精品一区二区| 国产精品二区不卡| 神马午夜久久| 免费看精品久久片| 国产精品日韩精品中文字幕| 不卡一二三区| 亚洲永久精品唐人导航网址| 久久不卡国产精品一区二区| 四虎国产精品免费观看| 欧美二三四区| 亚洲深夜av| 国产精品伦一区二区| 欧美日韩在线观看首页| 午夜一级在线看亚洲| 国产精品久久久久9999高清| 1000部精品久久久久久久久| 日韩国产91| 日韩在线中文| 亚洲精品日本| 日韩精品麻豆| 欧美亚洲综合视频| 成人羞羞在线观看网站| 中文字幕亚洲精品乱码| 国产欧洲在线| 亚洲色图综合| 国内一区二区三区| 美女精品在线| 国产精品精品| 日本成人在线不卡视频| 国产 日韩 欧美一区| 婷婷亚洲成人| 91精品蜜臀一区二区三区在线| 91精品美女| 黄色亚洲免费| 精品日本视频| 亚洲精品极品| 亚洲国产专区校园欧美| 国产精品观看| 亚洲丝袜美腿一区| 欧美日韩免费看片| 日韩欧美中文字幕在线视频| 亚洲一级少妇| 国产精品极品在线观看| 亚洲综合二区| 99久久99视频只有精品 | 免费在线看一区| 中文字幕在线高清| 国产精品www994| 亚洲一区二区三区久久久| 91中文字幕精品永久在线| 日韩精选在线| 99亚洲精品| 日韩成人亚洲| 精品精品国产三级a∨在线| 蜜臀久久久99精品久久久久久| 日韩伦理在线一区| 欧美精品二区| 国产毛片久久久| 日精品一区二区三区| 欧美另类专区| 99久久精品网| 久久蜜桃精品| 国产精品国产三级国产在线观看| 国产日韩欧美一区二区三区 | 日本不卡高清视频| 亚洲欧美日韩国产一区| 欧美sm一区| 欧美xxxx性| 欧美一级二级三级视频| 色综合视频一区二区三区日韩 | 国产日韩欧美中文在线| 美国三级日本三级久久99 | 日韩欧美激情电影| 亚洲人成精品久久久| 蜜桃视频在线观看一区二区| 国产精品日本| 欧美美女一区| 激情视频一区二区三区| 免费在线小视频| 国产va在线视频| 精品午夜久久| 精品72久久久久中文字幕| 国产日韩三级| 亚洲精品黄色| 日本亚洲不卡| 日韩av在线播放中文字幕| 日韩中文字幕| 亚洲精品欧美| 91精品视频一区二区| 日韩成人av影视| 国产日本精品| 国产精品久久久久77777丨| 国产精品嫩草影院在线看| 911精品国产| 久久国际精品| 久久爱www成人| 精品免费av| 亚洲最新无码中文字幕久久| 欧美一级鲁丝片| 亚洲爱爱视频| 美女少妇全过程你懂的久久| 欧美特黄视频| 蜜桃av一区二区三区电影| 日韩在线视频一区二区三区| 欧美日韩黄网站| 国产精品巨作av| 国产+成+人+亚洲欧洲在线| 桃色av一区二区| 国产精品97| 亚洲aa在线| 欧美激情aⅴ一区二区三区 | 久久亚洲道色| 91综合网人人| 黄色亚洲大片免费在线观看| 亚洲人成精品久久久| 国产欧美三级| 亚洲精品福利电影| 五月天久久网站| 亚洲91网站| 久久三级毛片| 亚洲小说欧美另类婷婷| 蜜桃91丨九色丨蝌蚪91桃色| 日韩激情视频网站| 精品国内亚洲2022精品成人| 日韩免费福利视频| 男女性色大片免费观看一区二区| 亚洲欧美专区| 免费观看亚洲天堂| 亚洲伦乱视频| 日韩中文字幕1| 欧美一区自拍| 日本精品黄色| 99国产精品私拍| 国产精品亚洲产品| 欧美日韩亚洲在线观看| 综合干狼人综合首页| 欧美激情99| 亚洲激情av| 久久wwww| 日韩视频一区| 国产激情一区| 红桃视频欧美| 国产欧美成人| 激情综合自拍| 国产日韩欧美三级| 日韩精品首页| 欧美午夜网站| 婷婷激情综合| 久久精品免视看国产成人| 在线观看免费一区二区| 日韩av不卡一区二区| 久久久天天操| 国产精品午夜av| 不卡中文字幕| 久久精品理论片| 亚洲一区导航| 久久精品导航| 国产精品中文| 国产视频欧美| 日韩精品dvd| 国产精品资源| 首页国产欧美日韩丝袜| 中文字幕在线视频久| 久久国内精品视频|