开发学院,分享开发教程和最新动态
章节列表 什么是ProtobufProtobuf3 定义数据类型Protobuf3 标量值类型Protobuf3 缺省值Protobuf3 枚举Protobuf3 使用其他消息类型Protobuf3 嵌套类型Protobuf3 更新消息类型Protobuf3 未知字段Protobuf3 Any类型Protobuf3 OneofProtobuf3 MapsProtobuf3 包Protobuf3 定义服务Protobuf3 JSON映射Protobuf3 可选项Protobuf3 生成属于自己的类Protobuf 风格指南Protobuf 编码(1)Protobuf 编码(2)Protobuf 编码(3)Protobuf 技术Protocol Buffer C++实例教程: 为什么使用Protocol Buffer?Protocol Buffer C++实例教程: 定义协议格式Protocol Buffer C++实例教程: 编译Protocol BufferProtocol Buffer C++实例教程: Protocol Buffer APIProtocol Buffer C++实例教程: 发送消息Protocol Buffer C++实例教程: 读取消息Protocol Buffer C++实例教程: 扩展Protocol BufferProtocol Buffer C++实例教程: 优化技巧和高级用法Protocol Buffer C#实例教程: 前言Protocol Buffer C#实例教程:定义协议格式Protocol Buffer C#实例教程:编译Protocol Buffer Protocol Buffer C#实例教程:解析和序列化Protocol Buffer Go实例教程:前言Protocol Buffer Go实例教程:定义协议格式Protocol Buffer Go实例教程:编译Protocol BufferProtocol Buffer Go实例教程:读写消息Protocol Buffer JAVA实例教程:前言Protocol Buffer JAVA实例教程:定义协议格式Protocol Buffer JAVA实例教程:编译Protocol BufferProtocol Buffer JAVA实例教程:Protocol Buffer APIProtocol Buffer JAVA实例教程:写消息Protocol Buffer JAVA实例教程:读消息Protocol Buffer JAVA实例教程:扩展Protocol BufferProtocol Buffer Python实例教程:前言Protocol Buffer Python实例教程:定义消息格式Protocol Buffer Python实例教程:编译Protocol BufferProtocol Buffer Python实例教程:Protocol Buffer APIProtocol Buffer Python实例教程:写消息Protocol Buffer Python实例教程:读取MessageProtocol Buffer Python实例教程:扩展Protocol Buffer

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位机器。