2012-08-16 3 views
1

죄송 문자열 INT 타입 사용 다음 struct.pack 파이썬 목록을 포장 내 영어에 대한

내가 좋아하는 목록이 : 내가 전화

[['string type','short int type','long int type','string type','float'], 
['Stackoverflow','32','0','any stringgg','55.0'], 
['anystring','16','1654657987984','striiingg','2.5']] 

:

['string type','short int type','long int type','string type','float'] 

이 처음이다 하위 목록 및

['Stackoverflow','32','0','any stringgg','55.0'] 

은 세 번째 하위 목록과 동일한 두 번째 하위 목록입니다.

두 번째 & 첫 번째 하위 목록의 유형에 따라 두 번째 struct.pack() 데이터를 어떻게 사용할 수 있습니까?

답변

1

당신은

import struct 

type_map = { 
     'string type': 's', 
     'short int type': 'h', 
     'long int type': 'q', 
     'float': 'f' 
     } 

conversion = { 
     's': str, 
     'h': int, 
     'q': int, 
     'f': float 
     } 


def do_pack(types, data): 
    if len(types) != len(data): 
     raise Excpetion("wrong lengths") 
    packing = '<' 
    data_iter = [] 
    for i, struct_type in enumerate(types): 
     t = type_map[struct_type] 
     if t == 's': 
      packing += '%ds' % len(data[i]) 
      data_iter.append(data[i]) 
     else: 
      packing += t 
      data_iter.append(conversion[t](data[i])) 
    return struct.pack(packing, *data_iter), packing 

packer = [['string type','short int type','long int type','string type','float'],['Stackoverflow','32','0','any stringgg','55.0'],['anystring','16','1654657987984','striiingg','2.5']] 

types = packer[0] 
for data_set in packer[1:]: 
    binary, packing = do_pack(types, data_set) 
    print struct.unpack(packing, binary) 

출력이 (빠르게 코딩, 사용할 수있는 몇 가지 작업)처럼 뭔가를 할 수

('Stackoverflow', 32, 0, 'any stringgg', 55.0) 
('anystring', 16, 1654657987984, 'striiingg', 2.5)