더북(TheBook)

앞서 왼쪽으로 시프트할 때 오버플로 되어버렸던 상위 비트들이, 오른쪽으로 시프트하면 이제 하위 비트가 된다. 이 하위 비트는 그다음 바이트, 즉 상위 바이트에 속한다. 오른쪽으로 시프트한 비트를 mBuffer[byteOffset + 1]에 OR 연산하면 우리가 기대한 최종 상태로 완성된다(그림 4-9).

 

▲ 그림 4-9 스트림 버퍼의 최종 완성 상태

 

복잡한 작업은 단일 바이트용 오버로드 WriteBits(uint8_t inData, uint32_t inBitCount)가 다 처리해 주므로 배열용 오버로드 WriteBits(const void* inData, uint32_t inBitCount)가 할 일은 주어진 데이터를 각 바이트로 쪼개어 한 바이트씩 단일 바이트용 WriteBits()를 호출하면 그만이다.

이제 출력 메모리 비트 스트림이 기능 면에서는 완성되었지만 아직 완벽한 건 아니다. 기록하려는 데이터마다 비트 수를 기재해 주어야 하기 때문이다. 대부분의 경우 비트 수의 상한선은 기록하려는 자료형에 따라 결정된다. 또한, 일부러 상한선보다 적은 수의 비트를 기록하는 경우는 흔하지 않다. 이런 이유로 기본 자료형에 다음과 같이 디폴트가 있는 매개변수를 추가하면 코드가 보다 명쾌해지고 유지보수도 쉬워진다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.