在实用nanopb的时候,有时候我们在写proto结构message的时候,希望有一个数组,或者一个字符串,并且限制这个字符串的长度。通常情况下,是使用repeat关键字,但是一般这个时候生成的pb.h和pb.c需要用户去写一个callback函数去编解码,这么做非常麻烦,直接就能把人干劝退了。
于是这个时候有了第一个方法就是多加一个option文件,在option文件中限制长度。
下面是proto文件
syntax = "proto2";
package ProtoData;
message Person
{
int32 Age = 1;
string Name = 2; [Max=200]
}
然后在同样proto文件名称的option文件中定义这个变量 max_size:200;
ProtoData.Person.Name max_size:200;
这样你才能生成一个可以用的pb文件,在生成的文件里会生成一个数组,
char Name[200];
不然你生成的就是pb_callback_t Name,一脸懵逼。
还有一种方法,是在proto3中使用的,上面的方法是在proto2中使用的。
syntax = "proto3";
import "nanopb.proto";
package ProtoData;
message person
{
int32 Age = 1;
string Name = 2[(nanopb).max_length = 200];
}
这样不用使用option文件,也可以生成一个数组
char Name[200];