Protocol buffers 协议缓冲区uint32字段,数据始终位于[0255]

Protocol buffers 协议缓冲区uint32字段,数据始终位于[0255],protocol-buffers,Protocol Buffers,在Google协议缓冲区中,我将使用一个字段来存储[0255]中的整数值。从中可以看出,uint32将是合适的值类型。尽管字段最多可以容纳32位整数,但在我的例子中,由于可变长度编码,这些额外的位不会被浪费。(如果到这里为止我错了,请纠正我。) 我的问题是:如何指示序列化消息的读取器可以假定该字段中的最大值为255?只是协议缓冲区规范中的注释?还有其他方法吗?在.proto中没有这样的规范;您必须简单地对其进行文档化(并在使用代码时适当地转换它) 旁白:如果您碰巧正在使用C#protobuf n

在Google协议缓冲区中,我将使用一个字段来存储[0255]中的整数值。从中可以看出,uint32将是合适的值类型。尽管字段最多可以容纳32位整数,但在我的例子中,由于可变长度编码,这些额外的位不会被浪费。(如果到这里为止我错了,请纠正我。)


我的问题是:如何指示序列化消息的读取器可以假定该字段中的最大值为255?只是协议缓冲区规范中的注释?还有其他方法吗?

在.proto中没有这样的规范;您必须简单地对其进行文档化(并在使用代码时适当地转换它)

旁白:如果您碰巧正在使用C#protobuf net实现,那么您可以在.proto定义之外工作(protobuf net首先允许代码):


就这样。实际内容流本身中没有其他信息。您唯一的希望是注释.proto文件,或者您是否提供了用于读/写协议缓冲区的附加类。(只是确认一下:实际上,除了字段标记外,它最多会将其打包为2个字节)
[ProtoMember(3)] // <=== field number
public byte SomeValue {get;set;}
optional uint32 someValue = 3;