2011-01-04 3 views
1

Google 프로토콜 버퍼에서 필드를 사용하여 [0,255]에 정수가 될 값을 저장합니다. http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar에서 uint32가 사용할 적절한 값 유형처럼 보입니다. 필드가 32 비트 정수까지 유지할 ​​수는 있지만 가변 길이 인코딩으로 인해 이러한 여분의 비트가 낭비되지는 않습니다. (내가 틀렸을 경우 수정 해주세요.)프로토콜 버퍼 uint32 데이터가 항상 [0,255] 인 필드

제 질문은 : 직렬화 된 메시지의 독자가 해당 필드의 최대 값이 255라고 가정 할 수 있다는 것을 어떻게 나타내야합니까? 프로토콜 버퍼 사양의 주석 만 있습니까? 다른 방법이 있습니까?

+2

. 실제 콘텐츠 스트림에는 추가 정보가 없습니다. 프로토콜 버퍼를 읽고 쓰는 데 필요한 추가 클래스를 제공하는 경우 또는 .proto 파일에 주석을 달 수 있습니다. – rfeak

+1

(확인 만하면 실제로 필드 마커를 제외하고 최대 2 바이트로 압축됩니다.) –

답변

2

.proto에는 이러한 사양이 없습니다. 당신은 단순히 그것을 문서화해야만한다 (아마도 소비 코드에서 적절히 형변환해야한다). 이외에도

: 당신은 C#을 protobuf - 그물 구현을 사용하는 일이 있다면, 당신은 외부 .proto 정의를 작업하여이 작업을 수행 할 수 있습니다 (protobuf - 그물 수 있습니다 코드 첫번째) :

[ProtoMember(3)] // <=== field number 
public byte SomeValue {get;set;} 

이것은 분명히 0-255로 제한되지만 예상대로 와이어에 인코딩됩니다 (예 : uint32). 또한 비 직렬화 할 때 checked 변환을 수행하여 값을 온 전성 검사합니다. .proto에서

은, 위의 정보는 다음의 제품에 가장 가까운 : 그것에 대해이야

optional uint32 someValue = 3;