protobuf-c 只有.c .h源文件没有.proto文件能否恢复.proto文件呢

答案是肯定的,只是想从proto-c生成的源文件恢复.proto描述文件,目前还没有自动化的工具,必须人去识别并恢复.proto文件

  • 我们知道,.proto文件里面由enum枚举类型和message消息体组成,message里面可以嵌套enum或者另外一个message

enum枚举类型,和一般的C语言定义枚举类型没什么两样,message的字段修饰由三个关键字来描述,分别是required、optional、repeated


  • 比如说生成的.h源码如下,里面有一个_PermitJoinType枚举,我们就知道.proto文件里面的enum名字叫做PermitJoinType,就是不带前面的下划线:
    protobuf-c 只有.c .h源文件没有.proto文件能否恢复.proto文件呢_第1张图片

.proto文件对应的enum类型如下:
protobuf-c 只有.c .h源文件没有.proto文件能否恢复.proto文件呢_第2张图片

  • 比如说.h源码里面的struct结构体,里面有一个结构体如下,名字叫做_AFAddr,对应在.proto文件里面的message名字就叫做AFAddr:
    protobuf-c 只有.c .h源文件没有.proto文件能否恢复.proto文件呢_第3张图片

.proto文件对应的message类型如下,请注意,例如上面.h文件里面的结构体字段有一个has_shortaddr,其实.proto文件里面并没有这个字段,主要是proto用的是optional可选关键字来描述shortaddr,所以protobuf-c在处理这个关键字的时候,另外加了一个变量has_shortaddr用来标明这个字段是否有值,接收方在收到这个字段的同时会收到has_shortaddr,所以就能知道是否真正有值:
protobuf-c 只有.c .h源文件没有.proto文件能否恢复.proto文件呢_第4张图片

  • 对应的还有repeated关键字的处理,protobuf-c会另外增加一个n_前缀的变量,用于标明repeated关键字描述的字段具体数量。

你可能感兴趣的:(嵌入式软件)