Skip to main content

Scalar Value Types

How each protobuf scalar type maps onto common language types.

Proto TypeNotesC++C#GoJavaPHPPythonRuby
doubledoubledoublefloat64doublefloatfloatFloat
floatfloatfloatfloat32floatfloatfloatFloat
int32Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead.int32intint32intintegerintBignum or Fixnum (as required)
int64Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead.int64longint64longinteger/stringint/longBignum
uint32Uses variable-length encoding.uint32uintuint32intintegerint/longBignum or Fixnum (as required)
uint64Uses variable-length encoding.uint64ulonguint64longinteger/stringint/longBignum or Fixnum (as required)
sint32Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s.int32intint32intintegerintBignum or Fixnum (as required)
sint64Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s.int64longint64longinteger/stringint/longBignum
fixed32Always four bytes. More efficient than uint32 if values are often greater than 2^28.uint32uintuint32intintegerintBignum or Fixnum (as required)
fixed64Always eight bytes. More efficient than uint64 if values are often greater than 2^56.uint64ulonguint64longinteger/stringint/longBignum
sfixed32Always four bytes.int32intint32intintegerintBignum or Fixnum (as required)
sfixed64Always eight bytes.int64longint64longinteger/stringint/longBignum
boolboolboolboolbooleanbooleanbooleanTrueClass/FalseClass
stringA string must always contain UTF-8 encoded or 7-bit ASCII text.stringstringstringStringstringstr/unicodeString (UTF-8)
bytesMay contain any arbitrary sequence of bytes.stringByteString[]byteByteStringstringstrString (ASCII-8BIT)