도구스개발

QUIC 가변길이 정수 인코딩 계산기

QUIC(RFC 9000)이 쓰는 가변길이 정수를 인코딩·디코딩합니다. 첫 바이트의 상위 2비트만으로 전체 길이(1·2·4·8바이트)가 정해지는 구조를 확인합니다.

인코딩 결과

25

1바이트 · 프리픽스 00

37
바이트 수1
첫 바이트 상위 2비트00
바이트열25
첫 바이트의 상위 2비트가 전체 길이를 정합니다 — 00=1바이트(0~63), 01=2바이트 (0~16,383), 10=4바이트(0~1,073,741,823), 11=8바이트(0~2⁶²−1). LEB128과 달리 나머지 바이트를 읽지 않아도 몇 바이트짜리인지 첫 바이트만으로 압니다.

사용 방법

  1. 1정수를 넣으면 QUIC varint 바이트열로 바뀝니다.
  2. 2반대로 바이트열을 넣으면 첫 바이트만으로 길이를 판단해 값을 되읽습니다.
  3. 363·16383·1073741823 경계에서 바이트 수가 어떻게 뛰는지 확인합니다.

자주 묻는 질문

LEB128은 바이트마다 최상위 비트로 "뒤에 더 있다"를 표시하며 바이트 수가 늘어나 뒤까지 다 읽어야 길이를 압니다. QUIC varint는 첫 바이트의 상위 2비트만 보면 전체 길이(1·2·4·8바이트)가 바로 정해집니다 — 나머지 바이트를 안 읽어도 몇 바이트짜리인지 압니다.

00이면 1바이트(6비트, 0~63), 01이면 2바이트(14비트, 0~16383), 10이면 4바이트(30비트, 0~1,073,741,823), 11이면 8바이트(62비트, 0~4,611,686,018,427,387,903)입니다. 첫 바이트의 나머지 6비트와 뒤따르는 바이트들을 빅엔디언으로 이어붙인 값이 실제 정수입니다.

HTTP/3·QUIC은 패킷을 파싱할 때 필드 하나하나의 길이를 미리 알아야 다음 필드로 건너뛸 수 있는 경우가 많습니다. 첫 바이트만 보고 길이를 알 수 있으면 뒤쪽 바이트를 다 읽지 않고도 다음 필드의 위치를 계산할 수 있어 파싱이 더 단순해집니다.

상위 2비트를 길이 표시에 쓰기 때문에, 8바이트(64비트) 중 실제 값에 쓸 수 있는 비트는 62비트뿐입니다. 그래서 QUIC varint가 담을 수 있는 최댓값은 2⁶²−1(4,611,686,018,427,387,903)입니다.

전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • RFC 9000 §16(rfc-editor.org·datatracker.ietf.org)을 기준으로 합니다. packetizer.com "Variable Length Integer Encoding"도 같은 2비트 프리픽스 구조를 재확인합니다(WebSearch, 2026-09-05).
  • RFC 9000 §16의 예시값(0x25→37, 0x7bbd→15293, 0x9d7f3e7d→494878333, 0xc2197c5eff14e88c→151288809941952652)으로 검산했습니다. 8바이트 예시는 직접 손으로 재계산해 확인했습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 5일 · 결과는 참고용 추정치입니다.