bitstring(Python)
2024년 5월 29일 수정
≡ 목차 (Table of Contents)
이 글은 더이상 관리되지 않으며 ⏍https://seorenn.github.io/article/python-bitstring.html 주소로 통합 관리될 예정입니다.
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
pos
와 bytepos
의 차이점을 잘 보자. pos
는 비트 단위다. 즉 비트 단위로 데이터를 읽을 수 있다는 말이다.
ConstBitStream
은 BitStream
의 불변(Immutable) 타입 클래스다. 메서드 등은 거의 동일하지만 BitStream
은 append()
같은 가변(Mutable) 메서드를 사용할 수 있다.
>>> bs = BitStream('0x0102') >>> bs.append('0x0304') >>> bs BitStream('0x01020304')