Protocol Buffers 디코더
인코딩된 Protocol Buffers 메시지를 업로드하거나 스키마를 안다고 가정하지 않고 분석할 수 있습니다. 이 브라우저 기반 디코더는 16진수, Base64, Base64URL, 원시 UTF-8 또는 바이너리 파일 입력 형식을 명시적으로 선택하게 합니다. 유효한 모든 protobuf 와이어 타입을 순서대로 읽고, 64비트 정수의 정확도를 유지하며, 잘못된 바이트 오프셋을 알리고, 모호한 길이 구분 바이트에 대해 완전하게 성립하는 모든 해석을 보여 줍니다. 페이로드는 브라우저 안에만 머물며, 데이터에 이름이 적힌 서비스에 디코더가 접속하는 일도 없습니다.
작동 방식
-
1
정확한 인코딩 선택
hex, Base64, Base64URL, 원시 UTF-8 또는 바이너리 파일 중 하나를 선택합니다. 도구가 입력 형식을 자동으로 추측하지 않습니다.
-
2
와이어 필드 분석
태그, 필드 번호, 와이어 값을 디코딩하고 스키마 타입을 임의로 지정하지 않은 채 유효한 nested 또는 packed 후보를 펼칩니다.
-
3
보고서 내보내기
추가 분석을 위해 스키마 없는 JSON, 수식 삽입 방지 CSV 또는 읽기 쉬운 텍스트 보고서를 다운로드합니다.
스키마 없는 Protobuf 디코더로 확인할 수 있는 것
Protocol Buffers는 원래의 .proto 선언이 아니라 필드 태그와 값의 연속을 저장합니다. 공식 protobuf 인코딩 가이드는 필드 번호를 3비트 왼쪽으로 이동한 뒤 와이어 타입과 결합해 태그를 정의하며, 이는 field_number × 8 + wire_type과 같습니다. 따라서 이 디코더는 필드 번호, 와이어 타입, 바이트 경계, 구조적으로 가능한 인코딩을 확정할 수 있습니다. 하지만 동일한 바이트가 uint64, int64, sint64, bool, enum 선언에 모두 쓰일 수 있으므로 varint의 선언 타입은 확정할 수 없습니다.
입력 모드는 항상 직접 선택합니다. Hex는 ASCII 공백과 맨 앞의 0x 하나까지 허용합니다. Base64와 Base64URL은 길이, 패딩, 사용되지 않은 패딩 비트를 각각 검증하며 표준 문자와 URL-safe 문자를 섞을 수 없습니다. 원시 텍스트는 브라우저의 TextEncoder가 만드는 정확한 UTF-8 바이트를 뜻하며 백슬래시 이스케이프는 해석하지 않습니다. 파일 입력은 파일의 바이트를 그대로 사용합니다.
와이어 타입과 해석
| 와이어 타입 | 인코딩된 값 | 보고서에 표시되는 내용 |
|---|---|---|
| 0 | Varint | 정확한 부호 없는 값, 2의 보수 부호 있는 값, ZigZag 값. Boolean은 0 또는 1일 때만 표시 |
| 1 | 리틀 엔디언 8바이트 | 정확한 fixed64, sfixed64 정수와 double 후보 |
| 2 | 길이와 뒤따르는 바이트 | Hex, Base64, 유효한 경우 엄격한 UTF-8, 완전한 모든 nested 또는 packed 후보 |
| 3 / 4 | 그룹 시작·종료 태그 | 같은 필드 번호로 짝을 이룬 그룹 자식. 종료 태그는 별도 레코드가 아닌 구분자 |
| 5 | 리틀 엔디언 4바이트 | 정확한 fixed32, sfixed32 정수와 float 후보 |
JavaScript의 일반 number 타입은 모든 64비트 정수를 정확히 나타낼 수 없습니다. 이 디코더는 전체 와이어 파서에서 BigInt를 사용하며 정확한 정수를 10진 문자열로 바꿔 표시하고 내보냅니다. NaN, 무한대, 음의 0 같은 특수 부동소수점 값도 문자열로 내보내므로 JSON이 조용히 다른 값으로 바꾸지 않습니다.
길이 구분 값의 모호성 이해하기
와이어 타입 2는 문자열, 원시 바이트, 내장 메시지, packed 반복 스칼라 값에 사용됩니다. 스키마가 없으면 하나의 바이트열이 여러 역할로 동시에 유효할 수 있습니다. 예를 들어 2a 03 01 02 03은 3바이트를 담은 필드 5입니다. 이 바이트는 packed varint [1, 2, 3]으로 유효하지만 평범한 바이트이기도 합니다. 디코더는 두 후보를 모두 보여 주며 어느 쪽이 더 가능성이 높다고 판단하지 않습니다.
nested message 후보는 길이 구분 본문 전체가 완전한 메시지로 분석될 때만 나타납니다. packed varint, fixed32, fixed64 후보 역시 해당 해석으로 모든 바이트가 소비될 때만 표시됩니다. 엄격한 UTF-8 후보는 전체 바이트열을 대체 문자 없이 디코딩할 수 있어야 합니다. 이 검사는 구조적 가능성을 보여 줄 뿐, 선언된 필드 타입을 알려 주지는 않습니다.
현대 스키마에서는 일반적으로 내장 메시지를 선호하지만, 그룹도 와이어 문법에 따라 처리합니다. start-group 태그는 동일한 필드 번호의 end-group 태그로 닫혀야 합니다. 루트의 종료 태그, 번호가 맞지 않는 종료 태그, 누락된 종료 태그는 정확한 바이트 오프셋에서 디코딩을 중단시킵니다. 오류 전에 완전히 디코딩된 필드는 계속 표시하며, 누락된 바이트나 알 수 없는 값을 거짓 0으로 만들지 않습니다.
제한, 프레이밍, 안전한 처리
이 디코더는 최대 10 MiB의 프레임 없는 메시지 하나를 받습니다. 길이 접두사가 있는 스트림, gRPC 프레임, delimited-message 파일 또는 전송 래퍼를 분리하지 않습니다. 먼저 프레이밍을 제거한 뒤 메시지 하나를 디코딩하세요. 파서는 전체 레코드 수, 재귀 깊이, 표시 행 수, 후보 분석 작업량도 제한합니다. 이러한 제어는 공식 대용량 데이터 지침과 구현 제한의 취지를 따릅니다. protobuf가 효율적이더라도 브라우저 진단 탭에는 메모리와 작업량 제한이 필요합니다.
필드 번호는 1에서 536,870,911 사이여야 합니다. 공식 필드 번호 지침이 19,000~19,999를 구현용으로 예약하므로 이 범위에는 경고를 표시합니다. 와이어 타입 6과 7은 유효하지 않습니다.
분석과 내보내기는 로컬에서 이루어집니다. 여러 단계 화면은 제한된 크기의 페이로드를 이 탭의 sessionStorage에 최대 2시간 보관할 수 있으며 처음부터 다시 시작하면 삭제됩니다. URL에 넣거나 당사 서버로 보내지 않습니다. JSON 출력은 명시적으로 이 도구 전용 형식의 디코드 보고서이며 ProtoJSON이 아닙니다. CSV는 UTF-8 BOM으로 시작하며 수식처럼 보이는 셀에 접두사를 붙여 스프레드시트에서 더 안전하게 열 수 있게 합니다. 보고서에는 여전히 기밀 애플리케이션 데이터가 포함될 수 있으므로 공유하기 전에 확인하세요.
자주 묻는 질문
아니요. 와이어 형식에는 필드 번호와 와이어 인코딩이 남지만 서로 다른 선언 스칼라 타입이 같은 바이트를 사용할 수 있습니다. 이름, 주석, 스키마 의도 대부분은 들어 있지 않습니다.
아니요. 입력 검증, 분석, 필터링, 내보내기는 브라우저에서 실행됩니다. 페이로드를 당사 서버로 전송하거나 URL에 넣지 않습니다.
길이 구분 값은 바이트, UTF-8 텍스트, 내장 메시지, packed 값을 모두 합법적으로 나타낼 수 있습니다. 스키마가 없을 때는 추측보다 완전한 후보를 모두 보여 주는 편이 정확합니다.
그 위치의 태그, varint, 고정 너비 값, 선언 길이 또는 그룹 경계가 불완전하거나 유효하지 않습니다. 앞서 완성된 필드는 부분 보고서에 남습니다.
직접 붙여 넣을 수는 없습니다. 이 디코더는 protobuf 메시지 하나를 읽으며 gRPC, varint 길이 또는 기타 전송 프레이밍을 제거하지 않습니다. 먼저 메시지 하나의 페이로드를 추출하세요.
관련 도구
FPS 카운터
requestAnimationFrame으로 브라우저 FPS를 측정하세요. 스무딩, 최소/최대 프레임레이트, 경고 임계값, 선택형 그래프를 제공합니다. 업로드나 API 없이 로컬에서 실행됩니다.
색상 혼합기
두 HEX 색상을 2-20개의 균등한 색상 견본으로 섞습니다. 양 끝 색상을 포함해 각 중간 색상을 대문자 HEX 코드로 확인하세요.
보색 찾기
어떤 입력에 대해서도 보색을 찾습니다. HSL 반대 색, 분할 보색 쌍, 그리고 접근성 있는 조합 제안을 반환합니다.
ASCII 이진수 변환기
ASCII 문자열을 이진수 표현으로 변환하세요. 각 문자는 8비트가 되고 공백으로 구분되어 프로토콜 추적이나 과제에 바로 붙여넣기 좋습니다.
색 대비 확인기
전경색과 배경색 간의 WCAG 대비비를 확인하십시오. AA, AAA, 큰 글자 및 비텍스트 영역의 대비 측면에서 합격/불합격을 판단합니다.
자바스크립트 압축기
변수명 변경, 공백 제거, 데드 코드 제거, 상수 폴딩으로 자바스크립트를 압축해 더 작은 번들을 만듭니다.
이 도구는 다른 언어로도 제공됩니다
- ตัวถอดรหัส Protocol Buffers [TH]
- Công cụ giải mã Protocol Buffers [VI]
- Protocol Buffers-avkodare [SV]
- Dekoder Protocol Buffers [ID]
- Protocol Buffers-decoder [NL]
- Dekoder Protocol Buffers [PL]
- Protocol-Buffers-Decoder [DE]
- Decodificador de Protocol Buffers [ES]
- أداة فك ترميز Protocol Buffers [AR]
- Decodificador de Protocol Buffers [PT]
- Décodeur Protocol Buffers [FR]
- Protocol Buffers デコーダー [JA]
- Декодер Protocol Buffers [RU]
- Protocol Buffers Kod Çözücü [TR]
- Protocol Buffers 解码器 [ZH]
- Protocol Buffers Decoder [EN]
- Decodificatore Protocol Buffers [IT]