用过python的struct模块的人都知道,struct模块的打包并不方便,尤其是处理字符串上。
字符串的长度必须打包的时候计算好,比如‘hello’ 那么打包格式 fmt就必须是‘5s’,因此fmt要么固定一个最大字符串长度 ‘180s’,要么动态的去计算长度 ‘%ds’%len(text)
字符串的长度必须打包的时候计算好,比如‘hello’ 那么打包格式 fmt就必须是‘5s’,因此fmt要么固定一个最大字符串长度 ‘180s’,要么动态的去计算长度 ‘%ds’%len(text)
- 如果采用固定字符串长度,那么解包的时候你获得的字符串将会是这样 ‘hello00x00x00x00x00x00x....’,因为python的字符串不是像C\C++那样以\0结尾来截取的。
- 如果字符串长度是在打包的时候才确定的,那么解包的时候很被动,解包的时候怎么知道fmt里s到底有多少个?
于是乎我就写了下面这个加强版struct模块,不过由于自己的编程水平有限,bug什么的,这个模块可能并不能实际使用,拿出来分享一下也好,指点指点指不定就有思路改良出更好的实现。
import struct
"""
author:kaluluosi
date:2015-11-02
extension of struct lib
surport
string argument aut