bitstring(Python)

2020년 7월 3일 수정

bitstring은 Python에서 이진 데이터를 생성하거나 분석하기 쉽게 해주는 도구다. 특히 문자열 데이터 표현을 실제 이진 데이터로 바꾸거나 혹은 그 반대의 작업을 하기에 유용하다.

설치 및 임포트

설치야 당연하게도 pip를 이용해 쉽게 할 수 있다.

pip install bitstring

임포트도 그냥 통채로 해도 된다.

import bitstring

물론 주요 클래스 중 필요한 것만 골라서 할 수도 있다.

from bitstring import Bits, BitArray, BitStream

Bits

bitstring의 근간이 되는 기본 클래스다. 그리고 불변(Immutable) 클래스다.

>>> Bits(0x01)
Bits('0b0')
>>> Bits('0x01')
Bits('0x01')

데이터 표현에 사용되는 클래스로 보여서 아마도 직접 사용할 일은 별로 없을 것 같다.

BitArray

이름처럼 하나 이상의 Bit로 구성된 데이터를 구성하기 위한 용도의 클래스다.

>>> ba = BitArray('0xff')
>>> ba
BitArray('0xff')
>>> ba.append('0xaa')
>>> ba
BitArray('0xffaa')
>>> ba.bin
'1111111110101010'
>>> ba.hex
'ffaa'
>>> ba.bytes
b'\xff\xaa'

여러 타입으로 변환도 지원하기 때문에 활용도는 높을 것 같다.

ConstBitStream, BitStream

ConstBitStream 는 바이트 스트림에서 위치를 이동해가며 원하는 타입으로 읽기 편하게 구성되어 있다.

>>> cbs = ConstBitStream('0x01020304')
>>> cbs.pos
0
>>> cbs.read('int:8')
1
>>> cbs.pos
8
>>> cbs.bytepos
1

posbytepos 의 차이점을 잘 보자. pos 는 비트 단위다. 즉 비트 단위로 데이터를 읽을 수 있다는 말이다.

ConstBitStreamBitStream 의 불변(Immutable) 타입 클래스다. 메서드 등은 거의 동일하지만 BitStreamappend() 같은 가변(Mutable) 메서드를 사용할 수 있다.

>>> bs = BitStream('0x0102')
>>> bs.append('0x0304')
>>> bs
BitStream('0x01020304')