python struct模块应用.数据转换换成二进制流
2012-08-18 23:18
459 查看
class Buffer: def __init__(self, bytes=None, recogn=10000): if (bytes == None): self.length = 4 self.buffer = struct.pack('i', recogn) else: self.length = len(bytes) self.buffer = bytes def write_char(self, c): self.buffer = self.buffer + struct.pack('c', c); self.length = self.length + 1 def write_short(self, value): self.buffer = self.buffer + struct.pack('h', value); self.length = self.length + 2 def write_int(self, value): self.buffer = self.buffer + struct.pack('i', value); self.length = self.length + 2 def write_utf(self, strings): self.write_short(len(strings)) self.buffer = self.buffer + struct.pack('%ds' % len(strings), strings); self.length = self.length + len(strings) def to_bytes(self): bytes = struct.pack('i', self.length + 4) + self.buffer # a,b = struct.unpack('ii',bytes) return bytes def read_char(self): c, self.buffer = struct.upack('c%ds' % (len(self.buffer) - 1), self.buffer) return c def read_short(self): value, self.buffer = struct.unpack('h%ds' % (len(self.buffer) - 2), self.buffer) return value def read_int(self): value, self.buffer = struct.unpack('i%ds' % (len(self.buffer) - 4), self.buffer) return value def read_utf(self): length = 0 self.read_short(length) string, self.buffer = struct.unpack('i%ds' % (len(self.buffer) - length), self.buffer) return string
很早以前,一直想写个游戏的服务器,从底层reactor,socket,epoll开始。终于,在两个月前开始了,叫dl server engine.写到现在,底层网络通讯模块基本完功,已经着手于把它分成多进程通讯,如认证服,网关,逻辑引擎等。
在测试reactor性能,懒得重新用C++写,就决定用python写个客户端测试工具,python是以前为了面试某游戏公司而学的。python的twisted网络库很好用,就决定用python加上twisted做客户端测试。在写的过程中,发现python没有把各种基本类型转换为二进制流的方法。上网百度,发现了struct这个模块,很好用,像C的printf格式化一样用。若想了解其详细用法。请百度。
参考了as的对于网络包的解包和写包的类,用python写了这个Buffer类,如果是发包,用Buffer(recogn = 10000)这个构造函数,因为一般发包到服务器的时候都带了个消息号,recogn就是消息号,写好各种数据后,调用to_bytes方法把包的长度最终二进成一个整包。如果是服务器发过来的网络包,用Buffer(bytes = package)这个构造方法,package就是服务器发来的二进制流.然后调用各个read_*方法。
最近在上班一边忙于工作,一边忙于写dl engine,感觉忙不过头,在工作上出了好多问题,晚上回来还一直想着怎么把dl engine完善,写到两三点。。感觉有点累。。这段时间,暂笔,把dl engine停一段时间,等到有空,再写,一个好的东西,须要最好的状态去经营。
相关文章推荐
- Python数据类型和C数据类型的转换-struct模块
- 在Python的struct模块中进行数据格式转换的方法
- 在Python的struct模块中进行数据格式转换的方法
- Python使用struct模块转换C语言结构体,打包、解包二进制数据
- Python模块--struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- Python模块学习:struct 数据格式转换
- python学习_应用pickle模块封装和拆封数据对象
- Python模块学习 ---- struct 数据格式转换
- python中用struct模块处理二进制数据(转)
- Python模块学习 ---- struct 数据格式转换
- Python模块--struct 数据格式转换
- Python模块学习 ---- struct 数据格式转换
- python中struct模块之字节型数据的处理
- python中使用struct模块处理二进制数据
- Python模块学习 ---- struct 数据格式转换
- Python模块——struct(字节流,组包拆包实现) bytes得转换
- python中用struct模块处理二进制数据(转)
- Python利用Struct模块编解码网络数据
- Python模块学习 ---- struct 数据格式转换