异想天开

What's the true meaning of light, Could you tell me why

python的struct

日期:2014-12-25 16:07:29
  
最后更新日期:2014-12-25 16:07:29
【水文记录】
python里面可以用struct.pack来组装类似c语言的struct的二进制格式的数据,同样可以利用struct.unpack来从二进制数据按格式提取数据。用法如下:
[code lang="cpp"]
#fmt为类似printf里面的格式字符串
struct.pack(fmt,...)
struct.unpack(fmt,...)
[/code]
假设你的包结构类似如下: [code lang="cpp"]
struct {
int len;
char data[]
}
[/code]
也就是len长度指定了data的数据长度。这样你发送"hello world"字符串的组装脚本如下:
[code lang="cpp"]
send_str="hello world"
fmt="!i%ds" % len(send_str)
real_send=struct.pack(fmt,len(send_str),send_str)
[/code]
这样把real_send发送出去即可。!号表示按照网络字节序排列,s表示unsigned char类似,其它类型请参考Python手册
解包时:
[code lang="cpp"]
str_len=struct.unpack("!i",recv_str)
fmt="%ds" % str_len
data_str=struct.unpack(fmt,recv_str[4:])
[/code]