2012-12-31 2 views
0

이전 파일 형식을 문서화하고 다음 문제로 혼란을 겪었습니다.이 가변 길이 정수 인코딩은 무엇입니까?

하나의 바이트 코드 번호 < = 0x7F와 정수 가변 길이 부호화 할 것으로 보이지만,> = 0x80 두 바이트로 인코딩된다. 정수 및 그 부호화 대응 세트 예 : 0x9007

  • 0x1500x8901
  • 로 부호화 0x8201
  • 0x89로 부호화 0xD002
  • 0x82로 인코딩 될 때

    • 0x390 부호화되고

      아직 나는 y 번호는 0xFFFF보다 큽니다. 따라서 인코딩 된 경우/확인할 수 없습니다. 내 삶을 위해서 나는 여기서 그 패턴을 해결할 수 없다. 어떤 아이디어?

  • 답변

    2

    숫자가 7 비트 청크로 분할 된 것처럼 보입니다. 각 비트는 출력 바이트의 7 개의 최하위 비트로 인코딩되며, 최상위 비트는이 바이트 다음에 더 많은 바이트가 있는지 여부를 나타냅니다 (즉, 인코딩 된 정수의 마지막 바이트는 MSB가 0 임).

    입력의 최하위 비트가 먼저 와서, 그래서 당신이 "리틀 엔디안"를 부를 수있는 것 같아요.

    편집 : (이 MIDI와 구글 프로토콜 버퍼에 사용되는) https://en.wikipedia.org/wiki/Variable-length_quantity를 참조

    +0

    브릴리언트! 도움을 주셔서 감사합니다. 지금 그것은 아주 명백하게 보인다, 나는 그것을 일찍 보지 않으면 어리 석다! –