例えば,Cで言う以下の感じのデータを pack/unpack したいと思ったとする.
struct obj {
unsigned short flen; /* 次にくるファイル名(fname)の長さ */ unsigned char *fname;/* ファイル名の文字列 */ unsigned short line; /* ファイルの行数 */};※ ただし,なんでかわからないけど,fname は UTF-8 .pack する時には,
fname = fname.encode('utf-8')flen = len(fname)line = "wc -l fname 的なコード"str = pack('H%dsH' % flen, flen, fname, line)unpackする時には,少し面倒だけど,
flen = struct.unpack('H', str[0:2])
cur += 2file = struct.unpack('%ds' % flen[0], str[cur:cur+flen[0]])cur += flen[0]
line = struct.unpack('H', str[cur:cur+2])print flen, file, lineとすればよいみたい.
unpack の返り値はタプルなので,上のような取り出し方をする場合には,
flen[0] のように取り出さないといけないみたい.めんどいな.
0 件のコメント:
コメントを投稿