服务器端是C/C++写的,python用于客户端发送消息,进行通信。这种模式可以用于压力测试,方便修改协议。

问题:

1.python 对于组包和二进制的操作没有C语言那么方便,如何针对数据类型打包?

python作为方便的脚本语言,提供了很少的几种数据类型,和C语言不能一一对应。打通信包时,不能做到像C语言那样移动和操作指针。

2.对于变长的字符串变量如何打到python包中

struct中格式化字符串需指定长度,但如果字符串长度不是固定的,如何打包和解包呢?

解决办法: 用python 的struct来进行打包。struct提供pack,unpack,pack_into,unpack_from函数,提供与C语言对应的数据format。

3.二进制数据如何打包?

 

1. 格式化二进制数据

示例:

import struct
fmt="ii"
buf = struct.pack(fmt,1,2)
print repr(buf)

会将两个整形以二进制打到包中。程序执行结果:

'\x01\x00\x00\x00\x02\x00\x00\x00'

格式和C语言类型的对应关系: