在 C++ 的 protobuf 中序列化数组 char、int8_t 和 int16_t

Serialize array char, int8_t and int16_t in protobuf for C++

在 protobuf 中,如何序列化一个字符数组,(u)int8_t 或 (u)int16_t?消息应该是这样的:

message ArrayWithNotSupportedTypes
{
int32 type = 1;
string byte_stream = 2;
}

其中 type 可以存储数组中存储的元素类型的一些唯一 ID。 然后 byte_stream 填充数组的内容,其中值是上述类型之一?

此外,我看到在 protobuf 中有一个名为 bytes 的类型,它在相应的 grpc.pb.h 文件中被转换为 std::string。在 string 之前选择 bytes 有什么好处吗?

如果数组不大,可以浪费一些space让界面更简单

message ArrayWithNotSupportedTypes
{
  repeated int32 data = 1; // one data entry per one element
}

如果数组很大,可以用你的方案来指明类型

message ArrayWithNotSupportedTypes
{
  enum Type {
    CHAR = 0;
    INT8 = 1;
    INT16 = 2;
  }
  optional Type type = 1;
  optional bytes data = 2; 
}

bytes 和 string 在 C++ 中类似:why protocol buffer bytes is string in c++?

参考:https://developers.google.com/protocol-buffers/docs/proto3#scalar