도구스개발

Bencode 인코딩 크기 계산기

BitTorrent 프로토콜(BEP-3)의 Bencode 포맷으로 정수·문자열·리스트·딕셔너리를 인코딩했을 때 바이트 수가 얼마나 되는지 계산합니다.

바이트

문자열 4:...

6바이트

래퍼(헤더)2바이트
내용물4바이트
합계6바이트
정수는 i-0e(음의 영)와 i03e처럼 앞자리 0을 붙인 표현을 스펙이 명시적으로 무효로 규정합니다. 이 계산기는 실제 정수값에서 자릿수를 세기 때문에 애초에 이런 무효한 표현이 나올 일이 없습니다. 딕셔너리 키는 원시 바이트 기준으로 정렬된 순서여야 한다는 점도 인코딩할 때 함께 지켜야 합니다.

사용 방법

  1. 1정수·문자열·리스트·딕셔너리 중 계산할 타입을 고릅니다.
  2. 2정수는 값 자체를, 문자열은 바이트 길이를 넣습니다.
  3. 3리스트·딕셔너리는 원소(또는 키값쌍)를 이 계산기의 정수·문자열 탭으로 먼저 구해 그 합을 넣으면 전체 크기가 나옵니다.

자주 묻는 질문

"i" + 부호(음수면 1바이트) + 10진 자릿수 + "e"입니다. 예를 들어 i3e는 3바이트, i-1234e는 부호 1 + 자릿수 4 + 앞뒤 i·e 2 = 7바이트입니다. 스펙(BEP-3)에 크기 제한이 없어 아주 큰 정수도 자릿수만큼 그대로 계산됩니다.

Bencode 문자열은 항상 "<길이>:<데이터>" 형식이라 데이터가 0바이트여도 "0:"이라는 2바이트가 붙습니다. 길이가 10자리를 넘어가면(예: 12345바이트) 길이를 적는 자릿수 자체도 늘어나 "12345:"처럼 6바이트가 됩니다 — 데이터가 커질수록 길이 필드도 같이 커진다는 뜻입니다.

Bencode의 리스트(l...e)·딕셔너리(d...e)는 MessagePack·CBOR과 달리 원소 개수를 따로 적지 않기 때문입니다. 여는 글자 뒤에 원소를 그대로 이어붙이고 마지막에 e로 끝을 알릴 뿐이라, 래퍼 자체는 원소가 1개든 1000개든 항상 정확히 2바이트입니다.

BEP-3 스펙이 딕셔너리 키를 원시 바이트 기준으로 정렬된 순서로 넣도록 명시하고 있기 때문입니다. 같은 딕셔너리라도 키 순서가 다르면 바이트열 자체가 달라지고, .torrent 파일의 info 해시처럼 인코딩 결과를 그대로 해시하는 곳에서는 순서가 틀리면 완전히 다른 값이 나옵니다.

BEP-3 스펙이 명시적으로 무효로 규정하기 때문입니다. 음의 영(i-0e)은 값으로서 의미가 없고, 앞자리 0을 붙인 표현(i03e)은 같은 값 3을 여러 바이트열로 표현할 수 있게 만들어 "값 하나에 인코딩 하나"라는 bencode의 원칙을 깨뜨립니다. 이 계산기는 실제 정수값에서 자릿수를 세므로 이런 무효한 표현이 애초에 나오지 않습니다.

알아두면 좋은 점

  • 리스트·딕셔너리의 "내용물 바이트 합계"는 원소를 미리 이 계산기의 정수·문자열 탭으로 구해 사용자가 직접 더해 넣는 값입니다. 이 도구가 원소를 재귀적으로 계산해 주지는 않습니다.
  • 중첩 리스트·딕셔너리(리스트 안에 딕셔너리가 있는 등)도 같은 원리로 안쪽부터 바깥쪽 순서로 계산하면 됩니다.

함께 보면 좋은 도구

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