將位元組打包為二進位制資料。
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
x
pad byte
no value
c
char
bytes of length 1
1b
signed char
integer
1b
unsigned char
integer
1?
_bool
bool
1h
short
integer
2h
unsigned short
integer
2i
int
integer
4i
unsigned int
integer
4l
long
integer
4l
unsigned long
integer
4q
long long
integer
8q
unsigned long long
integer
8n
ssize_t
integer
n
size_t
integer
e
(7)
float
2f
float
float
4d
double
float
8s
char
bytes
p
char
bytes
p
void *
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 ...