[컴][파이썬] struct.pack unpack 사용법

 

struct.pack unpack 사용법

python string을 c/c++ 에서 처럼 각 character 를 binary value 로 다뤄보자.

python 에서 ascii 값을 바로 처리하기 위해서 c 의 struct 기능을 제공해주는 struct 에 pack unpack 을 이용해 보자.

pack 은 c와 같은 struct 를 만들 때 쓰이고, unpack 은 반대로 c의 struct 같은 변수를 parsing 할 때 쓰인다.

python struct pack 사용법

import struct
>>> buffer = struct.pack("ibh", 1, 2, 3)
>>> print repr(buffer)
'x01x00x00x00
x02x00
x03x00'

“iii” 는 첫인자의 type을 int로, 2번째 인자의 type을 b(signed char) 로, 3번째 인자의 type을 h(short) 로 하겠다라는 뜻이다.

unpack

>>> unpack('%sB'%len('abc'), 'abc')
(97, 98, 99)
>>> unpack('%sB'%3, 'abc')
(97, 98, 99)
>>> unpack('ssB', 'abc')
('a', 'b', 99)
>>> unpack('2sB', 'abc')
('ab', 99)
  • http://effbot.org/librarybook/struct.htm
  • http://bytes.com/forum/thread38661.html
  • http://docs.python.org/lib/module-struct.html

string 안에 있는 %

string 안에 있는 %의 의미를 잠깐 살펴보자.

%는 string 과 Unicode 에서 특별한 의미를 갖는다.

% 는 뒤에 따라오는 값(values)에 의해 대체된다.

일단 뒤에 오는 value 가 dictionary 라면, 아래와 같이 사용할 수 있다. 이때 주의할 것은 mapped key 는 ’괄호’안에 써줘야 한다는 것이다.

  • http://python.kr/viewtopic.php?t=23997
>>> print '%(language)s has %(#)03d quote types.' % 
          {'language': "Python", "#": 2}
Python has 002 quote types.

여기서 한 가지 주의할 사항은 %~s 까지가 % 뒤에 있는 값으로 대체되는 것이다. 예를 들면, 아래와 같이 되는 것이다.

>>> unpack('%sB'%3, 'abc') ---> unpack('3B', 'abc')

더 자세한 사항은 아래 link 에서 참조하자.

  • http://docs.python.org/lib/typesseq-strings.html

위의 내용은 c/c++의 python 에 printf와 같은 기능을 제공해 주기도 한다.

>>>print "%x"%10

댓글 없음:

댓글 쓰기