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