协议缓冲区uint32字段,数据始终在[0,255]

时间:2011-01-04 21:37:55

标签: protocol-buffers

在Google协议缓冲区中,我将使用一个字段来存储[0,255]中将为整数的值。从http://code.google.com/apis/protocolbuffers/docs/proto.html#scalar开始,看起来uint32将是适当的值类型。尽管该字段能够容纳32位整数,但由于可变长度编码,在我的情况下不会浪费那些额外的位。 (如果我错在这里,请纠正我。)

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

1 个答案:

答案 0 :(得分:2)

在.proto中没有这样的规范;你必须简单地记录它(并且可能在消费代码中适当地投射它)。

除此之外:如果您正在使用C#protobuf-net实现,那么您可以通过外部 a .proto定义(protobuf-net允许代码优先)来完成此操作:

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

然后显然将其约束为0-255,但是会按照您的预期在线上进行编码(如uint32)。在反序列化时,它还会进行checked转换,以便对结果进行检查。

在.proto中,上述内容最接近:

optional uint32 someValue = 3;
相关问题