我想在Protocol Buffers中定义一个Point消息,它代表三维空间中的RGB彩色点。
janusgraph_ids
此处,message Point {
float x = 1;
float y = 2;
float z = 3;
uint8_t r = 4;
uint8_t g = 5;
uint8_t b = 6;
}
变量定义Point的位置,x, y, z
定义RGB空间中的颜色。
由于协议缓冲区中未定义r, g, b
,因此我正在寻找一种解决方法来定义它。目前,我使用uint8_t
代替uint32
。
答案 0 :(得分:3)
protobuf中没有任何代表单个字节的东西 - 它根本不是线格式所担心的事情。选项包括:
单个字节不适合任何。坦率地说,我将为所有3使用单个fixed32
,并手动组合/分解3个字节(通过移位等)。这里的优点是它只有3个字节的一个字段标题,并且不会通过高位来人为地拉伸(我不确定组合的RGB值是一个好的候选者)用于varint)。如果你想在以后添加别的东西(alpha,也许),你也会有一个备用字节。
所以:
message Point {
float x = 1;
float y = 2;
float z = 3;
fixed32 rgb = 4;
}
答案 1 :(得分:1)
恕我直言,这是正确的做法。您应该使用能够保存系统之间所有值的最近数据类型。来源&目标系统应验证数据是否在正确的范围内。对于uint8_t,这确实是int32。