導航:首頁 > 編程語言 > 淺析python中的struct模塊

淺析python中的struct模塊

發布時間:2022-08-20 18:18:37

python中的struct模塊怎麼使用

Ⅱ Python中如何使用C的結構體struct求解

閟truct就可以使用結構體了:
import struct
生成一個結構體實例:
data = struct.pack( 'format_string', struct_menber_1, struct_menber_2, ... )
其中的format_string用來指定結構體的格式(指明該結構體在C中的定義),由兩部分組成:
首先是一個可選的特殊字元,用來指明位元組序、數據類型大小和對齊方式:
@: native order, size & alignment (default)
=: native order, std. size & alignment
<: little-endian, std. size & alignment
>: big-endian, std. size & alignment
!: same as >
然後是指明結構體定義的部分:
The remaining chars indicate types of args and must match exactly;
these can be preceded by a decimal repeat count:
x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
h:short; H:unsigned short; i:int; I:unsigned int;
l:long; L:unsigned long; f:float; d:double.
Special cases (preceding decimal count indicates length):
s:string (array of char); p: pascal string (with count byte).
Special case (only available in native format):
P:an integer type that is wide enough to hold a pointer.
Special case (not in native mode unless 'long long' in platform C):
q:long long; Q:unsigned long long
Whitespace between formats is ignored.
如果struct模塊的函數出錯,將產生struct.error異常。

Ⅲ python 怎麼處理二進制文件

處理二進制數據離不開python的struct模塊,struct理解上你可以把它理解為c語言的結構體,使用該模塊的pack和unpack方法,可以很容易的把二進制數據轉換為常用的類型數據,如整型、字元型等
結構體如下:
struct Header

{

unsigned short id;

char[4] tag;

unsigned int version;

unsigned int count;

}

Ⅳ Python必學的模塊有哪些

簡單來說,模塊就是一堆代碼實現某個功能,它們是已經寫好的.py文件,在我們的.py文件中只需要用import導入模塊就能使用它的功能了。

Python中的模塊有內置標准模塊、開源模塊和自定義模塊。

內置標准模塊就是Python自帶的模塊,即下載好Python就可以直接導入使用的模塊,例如我們之前使用過的math模塊、time模塊等。

開源模塊就是不收費的由好心人寫好的模塊,我們可以通過下載這些模塊後導入使用,開源模塊一般也被我們稱為第三方模塊,例如數據處理工具NumPy、Pandas,以及深度學習著名框架Tensorflow都屬於開源模塊。

自定義模塊與開源模塊相對應,開源模塊是他人寫的,而自定義模塊就是自己寫好的模塊。

Python常見的三個模塊

一、time與datetime模塊

在Python中,通常有這幾種方式來表示時間:

二、random模塊

三、os模塊

os模塊是與操作系統交互的一個介面

Ⅳ python中的struct模塊中pack參數個數限制

struct.pack 函數後面的可變長參數沒有參數長度的限制。


另外,如果你已經將所需的參數放入一個叫args 的 tuple中,那麼可以用下面的方法傳給 pack 函數:

args=("H","elloworld",5)
struct.pack("c12si",*args)
#等價於
struct.pack("c12si","H","elloworld",5)

Ⅵ Python模塊如何理解

Python模塊,就是為避免重名而劃分出的用於存儲代碼的段落,一般有名稱,遵循縮進規則。python2.x版本中,以單個.py文件作為模塊;python3.x版本中,可以參照C語言中的struct來理解。也可以理解為不能繼承,也無需實例化,即可使用的類結構。

Ⅶ python struct模塊使用問題

when you pack a struct, you need to give it the format you need:

Check it here : http://www.python.org/doc//current/library/struct.html

In your case, you should

pack('BBHHHLL', a,b,c,d,e,f,g) # assuming all are unsigned.

Ⅷ python struct pack怎麼弄成二進制

有的時候需要用python處理二進制數據,比如,存取文件,socket操作時.這時候,可以使用python的struct模塊來完成.可以用 struct來處理c語言中的結構體.
struct模塊中最重要的三個函數是pack(), unpack(), calcsize()
8

# 按照給定的格式(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)
注1.q和Q只在機器支持64位操作時有意思
注2.每個格式前可以有一個數字,表示個數
注3.s格式表示一定長度的字元串,4s表示長度為4的字元串,但是p表示的是pascal字元串
注4.P用來轉換一個指針,其長度和機器字長相關
注5.最後一個可以用來表示指針類型的,佔4個位元組
為了同c中的結構體交換數據,還要考慮有的c或c++編譯器使用了位元組對齊,通常是以4個位元組為單位的32位系統,故而struct根據本地機器位元組順序轉換.可以用格式中的第一個字元來改變對齊方式.定義如下:

CHARACTER
BYTE ORDER
SIZE
ALIGNMENT

@ native native native
= native standard none
< little-endian standard none
> big-endian standard none
! network (= big-endian) standard none
使用方法是放在fmt的第一個位置,就像』@5s6sif』
例子1:
結構體如下:

structHeader{ unsigned shortid; char[4] tag; unsigned intversion; unsigned intcount;}

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

importstructid, 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:

importstruct 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=』abc\ndef』,我們可用len(x)得到它的長度為7,\n我們稱之為換行符,實際上是』0X0A』。當我們用』w'即文本方式寫的時候,在windows平台上會自動將』0X0A』變成兩個字元』0X0D』,』0X0A』,即文件長度實際上變成8.。當用』r'文本方式讀取時,又自動的轉換成原來的換行符。如果換成』wb』二進制方式來寫的話,則會保持一個字元不變,讀取時也是原樣讀取。所以如果用文本方式寫入,用二進制方式讀取的話,就要考慮這多出的一個位元組了。』0X0D』又稱回車符。linux下不會變。因為linux只使用』0X0A』來表示換行。

閱讀全文

與淺析python中的struct模塊相關的資料

熱點內容
二板股票源碼 瀏覽:440
度人經pdf 瀏覽:898
怎麼配置android遠程伺服器地址 瀏覽:956
java程序員看哪些書 瀏覽:939
什麼app可以免費和外國人聊天 瀏覽:793
pdf手寫筆 瀏覽:178
別永遠傷在童年pdf 瀏覽:986
愛上北斗星男友在哪個app上看 瀏覽:419
主力散戶派發源碼 瀏覽:669
linux如何修復伺服器時間 瀏覽:59
榮縣優途網約車app叫什麼 瀏覽:477
百姓網app截圖是什麼意思 瀏覽:226
php如何嵌入html 瀏覽:815
解壓專家怎麼傳輸 瀏覽:745
如何共享伺服器的網路連接 瀏覽:134
程序員簡易表白代碼 瀏覽:168
什麼是無線加密狗 瀏覽:64
國家反詐中心app為什麼會彈出 瀏覽:69
cad壓縮圖列印 瀏覽:104
網頁打開速度與伺服器有什麼關系 瀏覽:865