ASN1C ASN.1 compiler把ASN.1和/或XML架構(gòu)(XSD)源的規(guī)格轉(zhuǎn)化為C,C++, C#,?或?Java源代碼。開發(fā)人員可以使用這個(gè)代碼去實(shí)現(xiàn)結(jié)構(gòu)/目標(biāo)和已完成的ASN.1信息的相互轉(zhuǎn)化,這個(gè)ASN.1信息是使用任意ITU-T和ISO編碼規(guī)則(BER, CER, DER, PER或XER)以及ISO / IEEE醫(yī)療設(shè)備編碼規(guī)則(MDER)和NTCIP Octet編碼規(guī)則(OER)。ASN1C也包括工具用于XSD規(guī)格轉(zhuǎn)化為ASN.1規(guī)格,反之亦然。

ASN1C生成的代碼由類型定義和編碼/解碼函數(shù)(或方法)組成,這些函數(shù)(或方法)提供一個(gè)完整的應(yīng)用程序編程接口(API),用于處理ASN.1規(guī)格中包含的消息定義。
除了ASN.1編譯器之外,通用編碼/解碼函數(shù)的運(yùn)行時(shí)庫(kù)也是這個(gè)套包的一部分。此庫(kù)里有用于編碼和解碼ASN.1原語(yǔ)(布爾值、整數(shù)等)的例程。ASN1C ASN.1編譯器匯編對(duì)這些函數(shù)的一系列調(diào)用,以完成更復(fù)雜消息類型的編碼或解碼。
程序員需要做的就是使編碼器/解碼器啟動(dòng)并運(yùn)行:
1.運(yùn)行asn1c為給定的asn.1或xsd規(guī)范生成代碼,
2.開發(fā)一個(gè)應(yīng)用程序來(lái)調(diào)用生成代碼中的函數(shù)/方法,
3.編譯/鏈接應(yīng)用程序、生成的代碼和運(yùn)行時(shí)庫(kù)。
為了幫助處理上面的項(xiàng)目2和3,編譯器還能夠生成示例讀寫程序,以及生成所有生成代碼的生成文件。
ASN 1到C/C++
C和C++版本都使用一個(gè)共同的基本運(yùn)行庫(kù),該庫(kù)由一組低級(jí)原語(yǔ)C函數(shù)組成,用于編碼和解碼基本類型。代碼生成主要在C語(yǔ)言中完成,并為所有定義的ASN.1類型提供一套完整的C API函數(shù)。
C++代碼生成能力添加了一組類“包裝器”,它隱藏了調(diào)用編碼/解碼函數(shù)中的大部分細(xì)節(jié)。這些包裝器提供了特定于C++的附加服務(wù)。這包括通過構(gòu)造函數(shù)自動(dòng)初始化生成類型的變量,通過運(yùn)算符重載更容易地分配和測(cè)試數(shù)據(jù),以及通過事件處理機(jī)制的虛擬回調(diào)接口。
ASN 1到Java或C#
生成的Java代碼由一系列Java源文件組成,每一個(gè)在ASN 1規(guī)范中定義的每一個(gè)產(chǎn)品(類型)都是一個(gè)。這些Java文件中的每一個(gè)包含(至少)以下項(xiàng)目:
一個(gè)公共成員數(shù)據(jù)變量(或變量),用于保存生成類型的數(shù)據(jù)。
初始化變量的構(gòu)造函數(shù)(或構(gòu)造函數(shù))。
編碼方法。
解碼方法。
將對(duì)象內(nèi)容打印到給定輸出流的打印方法。
也有Java的運(yùn)行時(shí)庫(kù)。這包括一系列用于編碼和解碼原始ASN.1類型的類。例如,Asn1Integer類將對(duì)ASN.1整數(shù)類型的變量進(jìn)行編碼或解碼。編譯器將擴(kuò)展這些基類以形成直接從基類型派生的更高級(jí)別的類型,或者組裝一系列這些較低級(jí)別的對(duì)象以形成構(gòu)造的類型(例如序列)。
C#代碼的生成非常類似于上面描述的Java生成。為ASN.1規(guī)則中定義的每個(gè)產(chǎn)品生成單獨(dú)的C#類。它包含使用任何ASN.1編碼規(guī)則對(duì)類實(shí)例進(jìn)行編碼和解碼的構(gòu)造函數(shù)和方法。
支持Java微版本(J2ME)或C#緊湊版本庫(kù)的Java或C#嵌入式開發(fā)工具包是可用的。
京ICP備09015132號(hào)-996 | 違法和不良信息舉報(bào)電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號(hào)豪柏大廈C2座11層1105室
北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動(dòng)畫