ASN1C ASN.1 compiler把ASN.1和/或XML架构(XSD)源的规格转化为C,C++, C#,?或?Java源代码。开发人员可以使用这个代码去实现结构/目标和已完成的ASN.1信息的相互转化,这个ASN.1信息是使用任意ITU-T和ISO编码规则(BER, CER, DER, PER或XER)以及ISO / IEEE医疗设备编码规则(MDER)和NTCIP Octet编码规则(OER)。ASN1C也包括工具用于XSD规格转化为ASN.1规格,反之亦然。
ASN1C生成的代码由类型定义和编码/解码函数(或方法)组成,这些函数(或方法)提供一个完整的应用程序编程接口(API),用于处理ASN.1规格中包含的消息定义。
除了ASN.1编译器之外,通用编码/解码函数的运行时库也是这个套包的一部分。此库里有用于编码和解码ASN.1原语(布尔值、整数等)的例程。ASN1C ASN.1编译器汇编对这些函数的一系列调用,以完成更复杂消息类型的编码或解码。
程序员需要做的就是使编码器/解码器启动并运行:
1.运行asn1c为给定的asn.1或xsd规范生成代码,
2.开发一个应用程序来调用生成代码中的函数/方法,
3.编译/链接应用程序、生成的代码和运行时库。
为了帮助处理上面的项目2和3,编译器还能够生成示例读写程序,以及生成所有生成代码的生成文件。
ASN 1到C/C++
C和C++版本都使用一个共同的基本运行库,该库由一组低级原语C函数组成,用于编码和解码基本类型。代码生成主要在C语言中完成,并为所有定义的ASN.1类型提供一套完整的C API函数。
C++代码生成能力添加了一组类“包装器”,它隐藏了调用编码/解码函数中的大部分细节。这些包装器提供了特定于C++的附加服务。这包括通过构造函数自动初始化生成类型的变量,通过运算符重载更容易地分配和测试数据,以及通过事件处理机制的虚拟回调接口。
ASN 1到Java或C#
生成的Java代码由一系列Java源文件组成,每一个在ASN 1规范中定义的每一个产品(类型)都是一个。这些Java文件中的每一个包含(至少)以下项目:
一个公共成员数据变量(或变量),用于保存生成类型的数据。
初始化变量的构造函数(或构造函数)。
编码方法。
解码方法。
将对象内容打印到给定输出流的打印方法。
也有Java的运行时库。这包括一系列用于编码和解码原始ASN.1类型的类。例如,Asn1Integer类将对ASN.1整数类型的变量进行编码或解码。编译器将扩展这些基类以形成直接从基类型派生的更高级别的类型,或者组装一系列这些较低级别的对象以形成构造的类型(例如序列)。
C#代码的生成非常类似于上面描述的Java生成。为ASN.1规则中定义的每个产品生成单独的C#类。它包含使用任何ASN.1编码规则对类实例进行编码和解码的构造函数和方法。
支持Java微版本(J2ME)或C#紧凑版本库的Java或C#嵌入式开发工具包是可用的。