標籤:64位 格式化字串 article 用處 佔用 from 表示 樣本 流轉
-
- Python struct模組
- 用處
- struct模組中的函數
- 格式化字串
- code使用樣本
- Python參考手冊struct模組連結
轉載(http://blog.csdn.net/lis_12/article/details/52777983).
用處
- 按照指定格式將Python資料轉換為字串,該字串為位元組流,如網路傳輸時,不能傳輸int,此時先將int轉化為位元組流,然後再發送;
- 按照指定格式將位元組流轉換為Python指定的資料類型;
- 處理位元據,如果用struct來處理檔案的話,需要用’wb’,’rb’以二進位(位元組流)寫,讀的方式來處理檔案;
- 處理c語言中的結構體;
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的長度和電腦相關;
Python struct模組