当Python需要通过网络与其他平台进行交互的时候,就必须考虑将这些数据类型与其他平台或语言之间的类型进行互相转换问题。


struck.pack   将字符串理解为字节流或字节数组。

函数原型为:struct.pack(fmt,v1,v2....),参数fmt 是格式字符串,v1 ,v2 ...表示要转换的python值。


import struct  
  
a = 20  
b = 400  
  
str = struct.pack("ii", a, b)  #转换后的str虽然是字符串类型,但相当于其他语言中的字节流(字节数组),可以在网络上传输  
print 'length:', len(str)  
print str  
print repr(str)  
  
#---- result  
#length: 8  
#    ----这里是乱码  
#'/x14/x00/x00/x00/x90/x01/x00/x00'



struct.unpack 

struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的函数原型为:struct.unpack(fmt, string),该函数返回一个元组


str = struct.pack("ii", 20, 400)  
a1, a2 = struct.unpack("ii", str)  
print 'a1:', a1  
print 'a2:', a2  
  
#---- result:  
#a1: 20  
#a2: 400



struct.calcsize 用于计算格式字符串所对应的结果的长度。

关于格式字符串



在Python手册中,给出了C语言中常用类型与Python类型对应的格式符:


格式符

C语言类型

Python类型


x

pad byte

no value

 

c

char

string of length 1

 

b

signed char

integer

 

B

unsigned char

integer

 

?

_Bool

bool

 

h

short

integer

 

H

unsigned short

integer

 

i

int

integer

 

I

unsigned int

integer or long

 

l

long

integer

 

L

unsigned long

long

 

q

long long

long

 

Q

unsigned long long

long

 

f

float

float

 

d

double

float

 

s

char[]

string

 

p

char[]

string

 

P

void *

long