2011-02-03 3 views
0

직렬화/프로토콜 형식의 경우 서명되지 않은 64 비트 정수까지 부호없는 숫자를 공간 절약 방식으로 인코딩해야하는데 이는 여전히 구현하기 쉽습니다 (의미는 전용 압축 알고리즘을 찾고 있지 않음). 나는 다음에 대해 생각했다 : 오버플로 비트가있는 숫자의 바이너리 저장 ... 형식이 어떻게됩니까?

if n<128 
    take bits 0..6 for representing n, set overflow bit 7 to 0 
    store one byte 
if n>=128 and n<16384 
    take bits 0..6 of byte 1 as bits 0..6 of n, set overflow bit 7 of byte 1 to 1 
    take bits 0..6 of byte 2 as bits 7..13 of n, set overflow bit 7 of byte 2 to 0 
    store byte 1 followed by byte 2 
if n>=16384 and n<2^21 
    ...set overflow bit 7 of byte 2 to 1... (and so on) 

가 나는 이것에 대해 두 가지 질문이

이 :이 형식은 어떻게

  1. 라고? 어디에서 구현을 찾을 수 있습니까?

  2. 작은 숫자 < 128이 매우 자주 전송되는 소켓을 통해 전송되는 바이너리 프로토콜입니다. 추가 처리가 그만한 가치가 있다고 생각합니까?

답변

0

좋아, 좀 더 연구를 마친 후에 마침내 찾았습니다. '가변 길이 수량'이라고 불리며 MIDI 및 ASN.1에 사용됩니다 (Wikipedia Entry 참조)

다른 질문에 대답하려면 처리 오버 헤드의 가치가 없다고 생각하지만 저는 여전히 숙고하고 있습니다. 그것에 대해.

0

UTF-8과 같지 않지만 비슷합니다.

편집

BTW : 시도하고 알려진 프로토콜을 선택합니다. UTF-8, 허프만 인코딩 ...

+0

답장을 보내 주셔서 감사합니다. 물론, 알려진 프로토콜을 사용하고 싶습니다. 그래서 제가 묻는 것입니다. UTF8과의 유사성을 알고 있지만 이것은 숫자에 대한 것입니다. 인코딩을위한 7 비트와 1 오버플로 비트가있는 바이트 기반 형식을 사용하는 것은 자연스럽고 방금 발명 한 것 같지 않습니다. 전에 본 사람이 없습니까? – user601395

관련 문제