Python標準庫 struct模組

2021-09-26 12:08:30 字數 3689 閱讀 3369

將位元組打包為二進位制資料。

struct模組負責python bytes物件在python value及c struct之間的轉換。可以處理檔案二進位制資料、網路連線資料流或是其他源資料。它使用 format strings作為c結構布局的簡潔描述以及與python值的預期轉換。

第乙個format string可用於打包資料的位元組順序、大小和對齊。

character

byte order

size

alignment

@native

native

native

=native

standard

none

<little-endian

standard

none

>big-endian

standard

none

!network (= big-endian)

standard

none

如果第乙個位元組不在上述字元中,*@*被預設。

本機位元組順序是big-endian或little-endian,具體取決於主機系統,可使用sys.byteorder檢視系統的位元組序。

注意:在小端系統中,long型資料0x12345678

位址資料

0x00000100

0x78

0x00000101

0x56

0x00000102

0x34

0x00000103

0x12

記憶體的位址是由低到高的順序,而資料的位元組也是由低到高的。

在大端系統中,long型資料0x12345678

位址資料

0x00000100

0x12

0x00000101

0x34

0x00000102

0x56

0x00000103

0x78

記憶體的位址是由低到高的順序,而資料的位元組卻是由高到低的。

import struct

>>

> struct.pack(

'hhl',1

,2,3

)#位元組序預設為本機位元組序(@)

b'\x01\x00\x02\x00\x03\x00\x00\x00'

>>

> s = struct.pack(

'hhl',1

,2,3

)>>

> struct.unpack(

'hhl'

,s)#解包二進位制資料(1

,2,3

)>>

> s = struct.pack(

'!hhl',1

,2,3

)#按網路位元組序打包資料

>>

> s

b'\x00\x01\x00\x02\x00\x00\x00\x03'

>>

> struct.calcsize(

'hhl'

)#計算格式字元對應結構大小(short+short+long)

8

format

c type

python type

standard size

xpad byte

no value

ccharbytes of length 1

1bsigned charinteger

1bunsigned charinteger

1?_boolbool

1hshortinteger

2hunsigned shortinteger

2iintinteger

4iunsigned intinteger

4llonginteger

4lunsigned longinteger

4qlong longinteger

8qunsigned long longinteger

8nssize_tinteger

nsize_tinteger

e(7)

float

2ffloatfloat

4ddoublefloat

8scharbytes

pcharbytes

pvoid *integer

class struct.struct(fmt)

返回乙個新的struct物件,它根據格式字串格式寫入和讀取二進位制資料。建立乙個struct物件並呼叫其方法比呼叫struct具有相同格式的函式更有效,因為格式字串只需要編譯一次。

>>

>

import struct

>>

> s = struct.struct(

'!3sii'

)#!表示網路位元組序,3sii(3個字元、2個無符號整型數字)

>>

> values =

(b'zwj',3

,22)>>

> s.pack(

*values)

b'zwj\x00\x00\x00\x03\x00\x00\x00\x16'

>>

> pack_data = s.pack(

*values)

>>

> pack_data

b'zwj\x00\x00\x00\x03\x00\x00\x00\x16'

>>

> s.unpack(pack_data)

(b'zwj',3

,22)>>

> iter_data = s.iter_unpack(pack_data)

>>

> iter_data

>

>>

>

for i in iter_data:

print

(i)(b'zwj',3

,22)>>

> s.

format

#struct物件s的格式化字元

b'!3sii'

>>

> s.size #struct物件s的格式化字元對應結構的大小(位元組)

11>>

>

每週乙個 Python 標準庫 struct

技術部落格 structs 支援將資料打包成字串,並使用格式說明符從字串中解壓縮資料,格式說明符由表示資料型別的字元 可選計數和位元組順序指示符組成。有關支援的格式說明符的完整列表,請參閱標準庫文件。在此示例中,說明符呼叫整數或長整數值,雙位元組字串和浮點數。格式說明符中的空格用作分隔型別指示符,並...

Python3標準庫 struct二進位制資料結構

struct模組包括一些函式,這些函式可以完成位元組串與原生python資料型別 如數字和字串 之間的轉換。struct提供了一組處理結構值的模組級函式,另外還有乙個struct類。格式指示符將由字串格式轉換為一種編譯表示,這與處理正規表示式的方式類似。這個轉換會耗費一些資源,所以建立乙個struc...

python標準庫 時間庫

眾所皆知,每乙個程式語言都有自己的時間類庫,python也不例外用法十分簡單 最基本的類,time類 time基本函式介紹 import time print time.asctime 如果未傳入乙個tuple或乙個time struct就是使用當前的時間,返回乙個24字長的時間字串 就這個mon ...