用途
- 按照指定格式將 Python 數據型別轉換爲位元組流;
- 按照指定格式將位元組流轉換爲 Python 數據型別;
- 解析 C 語言中的結構體;
內建函數
函數 |
返回值 |
功能 |
pack(fmt, *args) |
string |
按照指定格式(fmt),將數據(*args)轉換成位元組流,返回位元組流 |
pack_into(fmt, buffer, offset, *args) |
None |
按照給定的格式(fmt),將數據(*args)轉換成位元組流,並將位元組流寫入以 offset (起始位)開始的 buffer |
unpack(fmt, string) |
tuple |
按照給定的格式(fmt)解析位元組流(string),並返回解析結果 |
unpack_from(fmt, buffer, offset=0) |
tuple |
按照給定的格式(fmt)解析以 offset (起始位置) 開始的緩衝區(buffer),並返回解析結果 |
calcsize(fmt) |
int |
計算給定的格式(fmt)佔用記憶體大小 |
格式化字串
位元組對齊
由於 C語言 在不同硬體裝置上採用的對齊方式不同,因此我們在解析數據流時要考慮位元組對齊的問題:
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 |
|
例程
從位元組流解析數據
struct data
{
char name[20];
float capacity;
float Electricity;
int status;
};
import struct
data = struct.unpack('<20sidx', data)
數據封裝爲位元組流