三.protobuf3标量值类型

Protobuf3 标量值类型

  标量消息字段可以具有以下类型之一——该表显示了.proto文件中指定的类型,以及自动生成的类中的相应类型:

.proto类型说明C++ 类型Java 类型Python类型Go类型Ruby类型C#类型PHP类型
double   double  double  float  float64  Float  double float
float   float  float  float  float32  Float  float  float
int32  使用可变长度编码。编码负数效率低下——如果你的字段可能有负值,请改用sint32。 int32  int  int  int32  Fixnum或Bignum(根据需要) int  integer
int64 使用可变长度编码。编码负数效率低下——如果你的字段可能有负值,请改用sint64。 int64  long  int/long[3]  int64  Bignum  long  integer/string[5]
uint32  使用可变长度编码。 uint32  int[1] int/long[3]  uint32  Fixnum或Bignum (根据需要) uint integer
uint64  使用可变长度编码。 uint64  long[1]   int/long[3] uint64  Bignum  ulong  integer/string[5]
sint32  使用可变长度编码。符号整型值。这些比常规int32s编码负数更有效。 int32  int  int  int32  Fixnum或Bignum (根据需要) int  integer
sint64  使用可变长度编码。符号整型值。这些比常规int64s编码负数更有效。 int64  long  int/long[3] int64  Bignum  long  integer/string[5]
fixed32  总是四字节。如果值通常大于228,则比uint 32更有效 uint32  int[1]  int/long[3]  uint32 Fixnum或Bignum (根据需要) uint  integer
fixed64  总是八字节。如果值通常大于256,则比uint64更有效 uint64  long[1] int/long[3] uint64  Bignum  ulong   integer/string[5]
sfixed32  总是四字节。 int32  int  int  int32 Fixnum或Bignum (根据需要) int  integer
sfixed64  总是八字节。 int64  long   int/long[3] int64 Bignum  long  integer/string[5]
bool    bool  boolean  bool  bool  TrueClass/FalseClass bool  boolean
string  字符串必须始终包含UTF - 8编码或7位ASCII文本 string  String  str/unicode[4]  string String (UTF-8) string  string
bytes  可以包含任意字节序列 string  ByteString  str  []byte String (ASCII-8BIT)  ByteString  string


  在协议缓冲区编码中序列化消息时,您可以了解更多关于这些类型的编码方式。

  [1] 在Java中,无符号的32位和64位整数使用它们的有符号对应值来表示,高位简单地存储在符号位中。

  [2] 在所有情况下,为字段设置值都将执行类型检查以确保其有效。

  [3] 64位或无符号32位整数在解码时总是表示得一样长,但是如果在设置字段时给出了一个int,则可以是一个int。在所有情况下,该值必须符合设置时表示的类型。参见[2]

  [4] python字符串在解码时表示为unicode,但是如果给出了ASCII字符串,则可以是str (这可能会发生变化)。

  [5] integer用于64位机器,string用于32位机器。

posted @ 2019-09-11 17:22  ken007  阅读(1852)  评论(0编辑  收藏  举报