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
댓글 없음:
댓글 쓰기