ASN.1 C++编译器是ASN.1 C编译器的增强版本, 应用面向对象编程技术。ASN.1 C++编译器自动翻译ASN.1规范为C++类以及用来编解码的元数据。
此外,C++运行时库的ASN.1也是ASN.1 C++编译器软件包的一部分。ASN.1 C++运行库提供一套底层的编解码基本的ASN.1类型(布尔,整数等)和丰富的实用功能以操纵应用程序消息的函数集合。 ASN.1 C++运行库是ANSI C兼容的,因此可以移植到广泛的平台和嵌入式系统的大型机处理器上运行。 ASN.1 C++运行库是一套底层的编解码基本的ASN.1类型(布尔,整数等)和丰富的实用功能以操纵应用程序消息的函数集合. ASN.1 C++运行库同时是面向元数据的,元数据在运行时载入并且可以在使用后释放。
ASN.1 C++编译器总是生成尽可能原始的类型,并没有继承任何类,ASN.1类型和C++类之间的映射是非常简单和直观,你不学习一些特殊的API,以便使用这些代码。这样最大限度地减少您的时间和努力去熟悉所产生的代码。
只生成ASN.1类型对应的类型安全的C++类和元数据,因此减少生成的代码,从而导致更高的代码重用率。
一些假设编码/解码的速度大大提高。当然,这些假设也构成一定的局限性。
元数据存储器的自动释放,释放实用工具函数用来释放消息的动态内容。
由于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)的范围之内,该范围取决于平台和编译器。该限制也就是说,任意大的整数不支持。
REAL类型的值总是作为二进制形式编码和解码,十进制的编码不能正确被解码。REAL类型的值精度不能超过C语言的double。该限制也就是说,任意精度的浮点数不支持。
SET OF类型的值的规范编码中,动态排序不支持,因为它十分耗费内存和CPU。因此,推荐在使用SET OF类型的地方一律改用SEQUENCE OF类型。
转至 ASN.1 C++编译器使用入门.