开发学院

您的位置:首页>教程>正文

教程正文

Protobuf3 标量值类型

Protobuf3 标量值类型

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

.proto类型说明C++ 类型Java 类型Python类型Go类型Ruby类型C#类型PHP类型
double
double double float float64 Float doublefloat
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 (根据需要)uintinteger
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] uint32Fixnum或Bignum (根据需要)uint integer
fixed64 总是八字节。如果值通常大于256,则比uint64更有效uint64 long[1]int/long[3]uint64 Bignum ulong  integer/string[5]
sfixed32 总是四字节。int32 int int int32Fixnum或Bignum (根据需要)int integer
sfixed64 总是八字节。int64 long  int/long[3]int64Bignum long integer/string[5]
bool 
bool boolean bool bool TrueClass/FalseClassbool boolean
string 字符串必须始终包含UTF - 8编码或7位ASCII文本string String str/unicode[4] stringString (UTF-8)string string
bytes 可以包含任意字节序列string ByteString str []byteString (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位机器。