2012-04-13 1 views
1

나는 C를 찾고 있어요 ++ 인 API 세트를 포함하는 몇 가지 구조 (양호하게는 템플릿 클래스)에 임의의 비트 크기의/때 unserialize (사용자 정의) 유형 효율적으로 직렬화 비트. 나는 boost::dynamic_bitset이 좋은 시작이라고 생각하지만 내장-유형을 추가하는 함수/연산자를 포함하지 않는 등 uint8_t, uint16_t 등 난이 다음 예에서와 같은 일을 할 쉬운 비트 수준 Serialiation

boost::dynamic_bitset bs; 
bs.append((uint8_t)123); 
bs.append((uint16_t)12345, big_endian); 

스트림 운영자 상태에 의존 엔디안-행동 aswell 지원해야합니다

bs << (uint8_t)(123); 
bs << little_endian; 
bs << (uint16_t)(12345); // serialized as little_endian 
bs << big_endian; 

는 또한 Boost.Serialization과 (부스트 샌드 박스에서) Boost.Endian 알고. 나는 비트 레벨까지 확장 된 것을 원합니다.

나는 boost::dynamic_bitset의 멤버 함수

void append(Block block); 

template <typename BlockInputIterator> 
void append(BlockInputIterator first, BlockInputIterator last); 

는 대부분의 사용자에게 너무 낮은 수준이다 생각합니다. 나는이 새로운 append 함수에서 재사용되어야한다고 생각한다. 더 많은 표현 템플릿을 최적화하기 위해 연속적인 serialization을 dynamic_bitset에 추가하기 전에 더 큰 (바이트 크기) 블록으로 그룹화하는 데 사용할 수 있습니다.

+0

비트 집합? – leftaroundabout

답변

1

저는 라이브러리를 모르지만 BitBufferReader/Writer를 직접 작성하는 것은 그리 어렵지 않으며 귀하의 요구 사항에 완전히 부합 할 것입니다.

+0

'BitBufferReader/Writer'는 어떤 클래스에서'boost :: dynamic_bitset'을 인스턴스화합니까? –

+1

바이트 오프셋과 비트 오프셋이있는 일반 컨테이너 (벡터/배열)를 사용 하겠지만 가장 적합한 것을 사용할 수 있습니다. – stefaanv

관련 문제