바이트의 구조를 확인

Protobuf 디코더

먼저 원시 wire 필드를 보고, 이름과 자료형이 필요할 때만 독립적인 .proto 정의를 추가하세요.

Protobuf 디코더

입력

선택적 .proto 정의

결과

바이트와 스키마는 이 브라우저에서만 처리하며 업로드하지 않습니다.

옵션

wire 메시지 또는 varint를 입력하세요.

로그에 바이트만 남아 있을 때 Protobuf 디코더는 각 필드 번호와 wire 유형을 원래 바이트 위치에 연결합니다. 스키마가 없어도 메시지의 경계를 살펴볼 수 있습니다.

proto 스키마 없이 읽는 protobuf 바이너리 데이터에는 필드 이름이 들어 있지 않습니다. 길이로 구분된 값은 문자열, bytes, 중첩 메시지 또는 packed 배열일 수 있으므로 후보를 확정된 형식으로 읽지 마세요.

Protobuf 디코더를 쓰는 이유

해석 옆에 원본 증거를 남깁니다.

필드에서 원본 바이트로 추적

Protobuf 디코더는 0부터 시작하는 오프셋, wire 유형, 원본 hex를 각 필드에 붙입니다. 길이가 잘린 곳도 정확한 위치를 표시해 패킷 덤프와 비교할 수 있습니다.

바이트 흐름이 번호별 필드와 각각의 바이트 범위로 연결된 그림.

스키마를 넣어도 원시 보기는 유지

한 파일로 완결되는 .proto를 붙이고 메시지 유형을 고르면 이름이 있는 JSON이 나옵니다. 원래의 번호와 hex가 사라지지 않아 형식 해석을 검증할 수 있습니다.

원시 필드 트리와 스키마로 해석한 값 트리가 나란히 있는 그림.

결과를 믿기 전에 확인할 세 가지

01

인코딩을 직접 고르기

기본값은 Hex이며 공백, 콜론, 0x 접두사를 허용합니다. Base64 문자열이면 설정을 바꾸세요. 짧은 문자열은 두 형식 모두에 맞을 수 있습니다.

02

여러 해석을 후보로 보기

wire 유형 0의 varint는 unsigned, signed, ZigZag, bool 등으로 읽힐 수 있습니다. 유형 2도 문자와 중첩 메시지를 구별하지 못합니다. 정확한 형식은 .proto를 확인하세요.

03

최신 결과만 내보내기

자동 디코딩은 입력 후 350ms 기다립니다. 끄면 Ctrl/Cmd + Enter로 실행합니다. 입력이나 옵션을 바꾸면 기존 결과의 복사와 다운로드가 즉시 비활성화됩니다.

원시 메시지에서 확인하는 것

네 가지 주요 wire 유형

Protobuf 디코더는 varint, fixed64, 길이 구분 값, fixed32를 읽습니다. 잘린 값과 예전 group 태그는 해당 바이트에서 오류를 내고 조용히 건너뛰지 않습니다.

정밀한 64비트 varint

varint 디코딩과 십진수의 역방향 인코딩을 같은 도구에서 처리합니다. BigInt로 uint64와 ZigZag sint64를 계산하므로 Number의 정밀도 한계에 걸리지 않습니다.

선언된 형식의 JSON

독립적인 .proto를 제공하면 반복 필드와 중첩 값을 형식에 따라 보여 줍니다. 스키마 오류가 나도 원시 wire 결과는 남아 있습니다.

입력 바이트를 보존한 hex

내보내기는 원본을 대문자 두 자리 hex로 정리할 뿐 메시지를 재인코딩하지 않습니다. 캡처와 다시 비교할 수 있습니다.

wire만으로 알 수 없는 것

원래 이름은 복원할 수 없음
스키마 없는 Protobuf 디코더는 번호와 wire 유형까지만 확정합니다. 필드 이름, enum 이름, oneof 관계를 만들어 내지 않습니다.
문자로 보여도 문자열은 아님
UTF-8로 읽히는 내용은 bytes나 중첩 메시지일 수도 있습니다. 여러 후보를 보여 줄 뿐 실제 선언 유형은 .proto에서 확인해야 합니다.
단일 로컬 스키마만 사용
원격 URL과 import 의존성을 불러오지 않습니다. 프로젝트에서 필요한 정의를 먼저 해결한 다음 독립적인 .proto를 붙여 넣으세요.
전송 계층은 처리하지 않음
gRPC의 5바이트 프레임 헤더를 제거하거나 압축을 풀지 않습니다. JSON으로 Protobuf 전체 메시지를 만드는 기능도 이 도구의 범위가 아닙니다.

Protobuf 디코더 자주 묻는 질문

필드 이름이 왜 안 나오나요?

바이너리에는 필드 번호만 저장됩니다. 실제 이름은 일치하는 .proto에 있어야 표시할 수 있습니다.

중첩 메시지인지 어떻게 판단하나요?

길이로 구분된 내용이 또 다른 유효한 wire 메시지일 수 있습니다. 하지만 우연히 그렇게 보일 수도 있어 후보로만 표시합니다.

숫자의 다른 해석이란 무엇인가요?

한 varint 비트열이 unsigned 정수나 ZigZag 부호 있는 정수로 해석될 수 있다는 뜻입니다. 선언형을 확인해야 값을 정할 수 있습니다.

gRPC 본문도 디코딩되나요?

아니요. gRPC 프레임 헤더와 압축을 먼저 제거한 뒤 원시 Protobuf 메시지 바이트를 입력해야 합니다.

페이로드가 업로드되나요?

아니요. 붙여 넣은 바이트와 스키마는 이 브라우저에서 처리하며 서버로 업로드하지 않습니다.

지원해야 할 정의에서 문제가 생겼나요?

다음 메시지도Protobuf 디코더로 확인

Protobuf 디코더의 바이트 오프셋과 원본 hex를 캡처와 맞춰 보고, 필요한 경우 .proto 선언으로 실제 뜻을 확인하세요.