ASN.1的C编译器可以自动地将ASN.1规范转换成C数据结构,加上用于编码和解码消息的元数据(使用的编码规则BER,CER,DER,PER)。开发人员可以很容易地将这些代码整合到他们的应用程序中。
此外,C运行时库的ASN.1也是ASN.1编译器软件包的一部分。ASN.1 C运行库提供一套底层的编解码基本的ASN.1类型(布尔,整数等)和丰富的实用功能以操纵应用程序消息的函数集合。 ASN.1 C运行库是ANSI C兼容的,因此可以移植到广泛的平台和嵌入式系统的大型机处理器上运行。
ASN.1 C编译器总是生成尽可能的原始类型,如减少您的时间和努力去熟悉所生成的代码。
ASN.1 C编译器生成ASN.1类型,如尽量减少生成的代码只有C的数据结构和元数据,从而导致更高的代码重用率。
由于生成较少的代码,和独特的元数据设计,使得最终占用内存最少。
作为一个轻量级库,ASN.1 C运行时库的ASN.1已作出了一些假设,从而大大提高了编码/解码的速度。当然,这些假设也构成一定的局限性。
由于ASN.1 C编译扩展了ASN.1开发工具,它具有ASN.1开发工具的所有限制。
为了编解码优化目的,长整型被用来保存标签tag,因此能支持表示的最大tag值是2097151(221)-1,但这几乎对所有的ASN.1规范都不是问题。
ENUMERATED类型的枚举个数,BIT STRING类型的比特长度,OCTET STRING类型的字节长度,SEQUENCE(OF)/SET(OF)类型或CHOICE类型的成员类型个数都不能超过整型unsigned int的最大值(通常是65536),这通常对所有的ASN.1规范也不是问题。
INTEGER类型的值必须在C语言的长整型long long(或__ int64_t于Windows)的范围之内,该范围取决于平台和编译器。该限制也就是说,任意大的整数不支持。 现在支持长达128比特的长整数,然而,可以通过配置支持更大的整数。
REAL类型的值总是作为二进制形式编码和解码,十进制的编码不能正确被解码。REAL类型的值精度不能超过C语言的double。该限制也就是说,任意精度的浮点数不支持。
SET OF类型的值的规范编码中,动态排序不支持,因为它十分耗费内存和CPU。因此,推荐在使用SET OF类型的地方一律改用SEQUENCE OF类型。
转至 ASN.1 C编译器使用入门.