python struct模組的使用
阿新 • • 發佈:2019-01-09
struct模組中的函式
函式 | return | explain |
---|---|---|
pack(fmt,v1,v2…) | string | 按照給定的格式(fmt),把資料轉換成字串(位元組流),並將該字串返回. |
pack_into(fmt,buffer,offset,v1,v2…) | None | 按照給定的格式(fmt),將資料轉換成字串(位元組流),並將位元組流寫入以offset開始的buffer中.(buffer為可寫的緩衝區,可用array模組) |
unpack(fmt,v1,v2…..) | tuple | 按照給定的格式(fmt)解析位元組流,並返回解析結果 |
pack_from(fmt,buffer,offset) | tuple | 按照給定的格式(fmt)解析以offset開始的緩衝區,並返回解析結果 |
calcsize(fmt) | size of fmt | 計算給定的格式(fmt)佔用多少位元組的記憶體,注意對齊方式 |
格式化字串
當打包或者解包的時,需要按照特定的方式來打包或者解包.該方式就是格式化字串,它指定了資料型別,除此之外,還有用於控制位元組順序、大小和對齊方式的特殊字元.
對齊方式
為了同c中的結構體交換資料,還要考慮c或c++編譯器使用了位元組對齊,通常是以4個位元組為單位的32位系統,故而struct根據本地機器位元組順序轉換.可以用格式中的第一個字元來改變對齊方式.定義如下
Character | Byte order | Size | Alignment |
---|---|---|---|
@(預設) | 本機 | 本機 | 本機,湊夠4位元組 |
= | 本機 | 標準 | none,按原位元組數 |
< | 小端 | 標準 | none,按原位元組數 |
> | 大端 | 標準 | none,按原位元組數 |
! | network(大端) | 標準 | none,按原位元組數 |
如果不懂大小端,見大小端參考網址.
格式符
格式符 | C語言型別 | Python型別 | Standard size |
---|---|---|---|
x | pad byte(填充位元組) | no value | |
c | char | string of length 1 | 1 |
b | signed char | integer | 1 |
B | unsigned char | integer | 1 |
? | _Bool | bool | 1 |
h | short | integer | 2 |
H | unsigned short | integer | 2 |
i | int | integer | 4 |
I(大寫的i) | unsigned int | integer | 4 |
l(小寫的L) | long | integer | 4 |
L | unsigned long | long | 4 |
q | long long | long | 8 |
Q | unsigned long long | long | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | string | |
p | char[] | string | |
P | void * | long |
注- -!
- _Bool在C99中定義,如果沒有這個型別,則將這個型別視為char,一個位元組;
- q和Q只適用於64位機器;
- 每個格式前可以有一個數字,表示這個型別的個數,如s格式表示一定長度的字串,4s表示長度為4的字串;4i表示四個int;
- P用來轉換一個指標,其長度和計算機相關;
- f和d的長度和計算機相關;