English

ASN.1 C编译器概述

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类型,如尽量减少生成的代码只有C的数据结构和元数据,从而导致更高的代码重用率。

  • 内存消耗低,更适合嵌入式系统。

    由于生成较少的代码,和独特的元数据设计,使得最终占用内存最少。

  • 高速编码/解码与多线程的支持。

    作为一个轻量级库,ASN.1 C运行时库的ASN.1已作出了一些假设,从而大大提高了编码/解码的速度。当然,这些假设也构成一定的局限性。

  • 完全支持相关BER,CER,DER,PER编码规则,包含了丰富的操作消息的实用功能。

已知限制

  • ASN.1开发工具限制

    由于ASN.1 C编译扩展了ASN.1开发工具,它具有ASN.1开发工具的所有限制

  • Tag

    为了编解码优化目的,长整型被用来保存标签tag,因此能支持表示的最大tag值是2097151(221)-1,但这几乎对所有的ASN.1规范都不是问题。

  • Length

    ENUMERATED类型的枚举个数,BIT STRING类型的比特长度,OCTET STRING类型的字节长度,SEQUENCE(OF)/SET(OF)类型或CHOICE类型的成员类型个数都不能超过整型unsigned int的最大值(通常是65536),这通常对所有的ASN.1规范也不是问题。

  • INTEGER

    INTEGER类型的值必须在C语言的长整型long long(或__ int64_t于Windows)的范围之内,该范围取决于平台和编译器。该限制也就是说,任意大的整数不支持。 现在支持长达128比特的长整数,然而,可以通过配置支持更大的整数。

  • REAL

    REAL类型的值总是作为二进制形式编码和解码,十进制的编码不能正确被解码。REAL类型的值精度不能超过C语言的double。该限制也就是说,任意精度的浮点数不支持。

  • SET OF

    SET OF类型的值的规范编码中,动态排序不支持,因为它十分耗费内存和CPU。因此,推荐在使用SET OF类型的地方一律改用SEQUENCE OF类型。

下一步...

转至 ASN.1 C编译器使用入门.