如何为自定义方法生成UPER编码的ASN自动生成文件?附Trace-mgmt代码
生成UPER编码的ASN.1自动生成文件指南
工具选择
使用asn1c工具——这是生成C语言ASN.1编解码代码的常用工具,完美支持UPER编码格式。
操作步骤
准备ASN.1定义文件
把提供的ASN.1代码保存为trace-mgmt.asn文件,注意代码里TraceRecordType枚举中的...是ASN.1开放式枚举标记,若不需要扩展可直接删除,保留也符合语法规范。安装asn1c工具
- Debian/Ubuntu系Linux:直接执行
sudo apt-get install asn1c完成安装 - 手动编译:克隆asn1c源码仓库,进入仓库目录后执行
./configure && make && sudo make install完成编译安装
- Debian/Ubuntu系Linux:直接执行
执行生成命令
打开终端,切换到trace-mgmt.asn所在目录,运行以下命令生成仅支持UPER编码的代码:asn1c -gen-UPER -no-gen-OER -no-gen-JER -out-dir ./generated trace-mgmt.asn参数说明:
-gen-UPER:指定生成UPER编码的编解码逻辑-no-gen-OER/-no-gen-JER:禁用OER、JER等其他编码格式的代码生成,只保留UPER相关代码-out-dir ./generated:将生成的文件输出到当前目录下的generated文件夹(可自行修改路径)
重命名生成文件
生成完成后,将默认命名的文件改成你需要的名称:- 把生成的
.x文件(比如Trace-mgmt.x)重命名为jnt_asn.x - 把生成的
.h文件(比如Trace-mgmt.h)重命名为jnt_asn.h - 把生成的类型数据库文件(比如
asn_DEF_Trace-mgmt.c)重命名为jn_db.c
- 把生成的
生成文件说明
jnt_asn.x:包含ASN.1类型的宏定义、编解码函数声明,是编解码入口的核心头文件jnt_asn.h:对应ASN.1结构的C语言结构体定义,所有SEQUENCE、ENUMERATED等类型都在这里映射为C结构体jn_db.c:ASN.1类型的数据库实现,包含类型描述符、编解码逻辑的核心代码
注意事项
- 检查ASN.1语法:确保
TraceRecordType中的...使用正确,若为固定枚举需删除该标记,避免语法错误 - 编译代码时,需要链接asn1c的运行时库,示例编译命令:
gcc -o your_app your_code.c generated/jnt_asn.c generated/jn_db.c -lasn1c - 尽量不要直接修改生成的代码,若需自定义行为,优先通过asn1c的命令行参数调整,防止后续重新生成时覆盖修改内容
内容的提问来源于stack exchange,提问作者Raghavendra
相关产品推荐
相关产品推荐

