在 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
在 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