亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        ASN.1 的PER 分層運行庫系統(tǒng)的設計和實現(xiàn)

        2020-10-20 09:13:04
        微處理機 2020年5期
        關(guān)鍵詞:編解碼數(shù)據(jù)類型編碼

        高 益

        (重慶航天職業(yè)技術(shù)學院電子工程系, 重慶400021)

        1 引 言

        ASN.1 編解碼運行庫軟件在應用ASN.1 的系統(tǒng)中起著極為重要的作用,是整個系統(tǒng)中不可缺少的一部分,被用來處理針對不同的ASN.1 編解碼規(guī)則提供不同的編解碼函數(shù)[1]。例如:BER 編解碼規(guī)則對應BER 編解碼函數(shù),PER 編解碼規(guī)則對應PER 編解碼函數(shù),這些具體規(guī)則對應的編解碼函數(shù)通過調(diào)用其相應的ASN.1 運行庫完成其編解碼過程[2]??芍苯诱{(diào)用這些編解碼函數(shù)完成復雜數(shù)據(jù)結(jié)構(gòu)與傳輸碼之間的轉(zhuǎn)換,從而開發(fā)出實用ASN.1 的應用系統(tǒng)?;诖耍狙芯恐塾谔岣呔幗獯a運行庫系統(tǒng)的靈活性和移植性,以降低使用難度為目標,設計實現(xiàn)一種智能化編解碼系統(tǒng)。

        2 PER 分層運行庫系統(tǒng)模型組成和功能

        PER 的編碼原則就是用最簡單的規(guī)則得到最簡潔的編碼[3],相應地PER 的編碼規(guī)則也就更加復雜。除少數(shù)類型沿用了BER 的編碼方法外,PER 各個數(shù)據(jù)類型的編碼比BER 都精簡得多,冗余信息極少。在此可設計一個底層的函數(shù)庫,把這些共同的特征函數(shù)封裝在一起,以此大大提高運行庫的執(zhí)行效率。基于不同ASN.1 編碼規(guī)則的共同點,設計出一個ASN.1 分層運行庫系統(tǒng),其建模結(jié)構(gòu)如圖1 所示。

        圖1 ASN.1 分層運行庫系統(tǒng)模型

        圖中各主要部分功能簡介如下:

        底層函數(shù)庫層ASN.1 編解碼函數(shù)的很多代碼是各種類型所共用的,如果提供公共函數(shù)以供其它編解碼函數(shù)調(diào)用,就可減少不必要的代碼重復。

        ASN.1 各種編解碼規(guī)則庫層在上述的公共函數(shù)庫層之上,可根據(jù)ASN.1 各種編碼規(guī)則編寫不同類型的編解碼函數(shù)庫,例如:BER 編解碼運行庫、PER 編解碼運行庫、DER 編解碼運行庫等。以此可令ASN.1 數(shù)據(jù)值編碼大為簡化。如果為每個基本的ASN.1 數(shù)據(jù)類型編寫編解碼函數(shù),則可以提供公共的函數(shù)庫給各應用系統(tǒng)調(diào)用。

        宏定義層把常用的代碼段定義為宏,這樣就便于定義與應用有關(guān)類型的編解碼函數(shù)。提供一部分宏定義直接供其調(diào)用,包括處理內(nèi)存分配、釋放和長度計算的宏定義。

        不同編解碼規(guī)則都有相同的表述數(shù)據(jù)類型的方式,可分為:簡單類型、復合類型和其它類型[4]。ASN.1 的PER 分層運行庫系統(tǒng)模型也隨之包括簡單、復合與其它類型的編解碼處理層。ASN.1 的PER 分層運行庫系統(tǒng)的總體設計框架如圖2 所示。

        圖2 ASN.1 的PER 分層運行庫模型

        圖中各主要部分的功能為:

        簡單類型編解碼層該層位于模型的最底層,是為ASN.1 語法描述中定義的所有基本數(shù)據(jù)類型提供的編解碼函數(shù),一個基本類型對應一套編解碼流程和一對編解碼函數(shù)。

        復雜類型編解碼層該層位居中間,與其對應的是ASN.1 智能PER 編解碼系統(tǒng)的中間結(jié)構(gòu)編解碼處理層。如此的構(gòu)成,可實現(xiàn)直接調(diào)用,無需在運行庫中再次查找,省去了代碼的重復壓棧和出棧,提高編解碼運行庫的運行時間,同時也節(jié)約了代碼運行所占的空間。

        其它類型編解碼層這一層位于運行庫系統(tǒng)的最上層,對除了基本類型和構(gòu)造類型外的其它ASN.1 類型,即對ASN. I 中的CHIOCE 和ANY 類型,進行編解碼處理。

        運行庫函數(shù)不應隨著相應協(xié)議的變化而變化,它實現(xiàn)的是編解碼底層的支撐函數(shù),符合標準C,具有較好的可移植性。

        3 簡單類型編解碼處理層設計實現(xiàn)

        簡單類型編解碼處理層的接口函數(shù)的實現(xiàn)應基于輸入需要編碼或者解碼的數(shù)據(jù)、數(shù)據(jù)長度、輸出編解碼數(shù)據(jù)的需求[5]。先設計一個結(jié)構(gòu)體RUNBuffer 用來存儲消息緩沖區(qū)的編解碼數(shù)據(jù):

        typedef struct {

        char* data;

        unsigned int byteIndex;

        int size;

        short int bitoffset;

        unsigned char aligned;

        }RUNBuffer;

        RUNBuffer 結(jié)構(gòu)體中變量data 是一個字符串指針,指向輸入數(shù)據(jù)起始的地址;變量byteIndex 是一個無符號整形,表示當前編碼結(jié)果字節(jié)的位置;變量size 是一個整型的值,表示當前緩沖區(qū)的大?。蛔兞縝itoffset 是一個短整型的值,表示當前地址偏移了多少位;變量aligned 是一個無符號的字符類型,表示當前數(shù)據(jù)是否為PER 的對齊方式。

        在以下示例中,對ASN.1 基本類型的編解碼算法進行設計,重點以整型為例,詳細給出編碼算法、整型編碼模塊實現(xiàn)流程圖和函數(shù)編解碼實現(xiàn)代碼:

        INTEGER 類型編解碼算法:

        步驟1:判斷整數(shù)有無約束,如果沒有約束,就按照無約束編碼方式,用最少字節(jié)編碼n 的值,內(nèi)容字節(jié)的前面需要長度編碼,表示n 的值占用了多少個字節(jié)。長度也用最少字節(jié)編碼。編碼成功,返回值為1,結(jié)束;如果有,則跳到步驟2。

        步驟2:判斷整數(shù)約束限度到唯一值,如果是,則編碼失敗,返回值-1,結(jié)束;如果不是,則跳到步驟3。

        步驟3:判斷整數(shù)約束的下限是否是無限的,如果是,則按無約束方式編碼,編碼成功,返回值1,結(jié)束;如果不是,則跳到步驟4;

        步驟4:判斷整數(shù)約束的下限是否是一個有限數(shù),如果是,則上限是一個無限數(shù),按照半約束整數(shù)方式編碼,編碼成功,返回值1,結(jié)束;如果不是,則跳到步驟5;

        步驟5:判斷整數(shù)約束的下限和上限是否都是有限數(shù),如果不是,則編碼失敗,返回值-1,結(jié)束;如果是,則按照約束整數(shù)方式編碼,編碼成功,返回值1,結(jié)束。

        INTEGER 類型編碼流程圖如圖3。

        圖3 整型編碼模塊實現(xiàn)流程圖

        4 復雜類型編解碼處理層設計實現(xiàn)

        4.1 算法約束規(guī)則

        復雜類型即為ASN.1 中的構(gòu)造類型,對此可按照表1 所示的規(guī)則處理[6]。

        表1 復雜類型算法約束

        表中所示的這四種類型編碼算法,在Canonical PER 中和Basic PER 中,標記有DEFAULT 的成員,如果要編碼的值是缺省值,則此成員的編碼省略;而對于結(jié)構(gòu)化的成員,即使它的取值是缺省值,是否被編碼仍須由以下兩點來判定:

        ①類型是可擴展的且取值沒有出現(xiàn)擴展附加部分,則SEQUENCE 的值的編碼結(jié)束;

        ②類型是可擴展的且取值有n 個擴展附加部分,則添加一個n 比特bitmap,對應比特取值1,表示該擴展附加部分出現(xiàn)。

        當長度為n 的bitmap 增加一個長度指示后,編碼方式為小的非負整數(shù)的編碼。后面依次出現(xiàn)的擴展附加部分的編碼方式如下:

        擴展附加部分是單個成員,則以open 類型來編碼,即包括長度字段和整數(shù)個字節(jié)的值字段;

        擴展附加部分是由雙重方括號內(nèi)全部成員組成,則擴展附加部分的值以open 類型編碼。區(qū)別在于:雙重方括號內(nèi)全部成員的值均作為一個sequence類型的取值來編碼[7]。set 中的元素也可以是可選的,用關(guān)鍵字optional 來描述,若具有缺省值,用default來描述。

        4.2 具體編碼算法

        算法首先要判定數(shù)據(jù)的類型,如果經(jīng)判定數(shù)據(jù)類型為sequence,則計算其中出現(xiàn)的具有可選/必選屬性的元素個數(shù),用n 位來表示這n 個元素是否出現(xiàn),若出現(xiàn)了,則用1 表示;若沒有出現(xiàn),則用0 表示。這n 位數(shù)的順序就是元素在sequence 中出現(xiàn)的順序。然后按元素的出現(xiàn)順序和類型調(diào)用相應的編碼函數(shù),編碼結(jié)束。

        如果經(jīng)判定數(shù)據(jù)類型為set,則計算其中出現(xiàn)的具有可選/必選屬性的元素個數(shù),用n 位來表示,若出現(xiàn),則用1 表示;若沒有,則用0 表示。這n 位數(shù)的順序就是元素在set 中出現(xiàn)的順序。按元素的定義順序和類型調(diào)用相應的編碼函數(shù),編碼結(jié)束。

        SEQUENT OF 數(shù)據(jù)類型編碼過程和SEQUENT相同。而SET OF 數(shù)據(jù)類型編碼過程和SET 相同。

        以下為SEQUENCE 類型的編碼函數(shù):

        int SEQUENCE_encode_per(asn_per_constraints_t*constraints,

        asn_codec_max*opt_codec_max,

        void*sptr,asn_per_outp_t*po)

        5 其它類型編解碼處理層設計實現(xiàn)

        除了上述類別外,ASN.1 中還有CHIOCE 和ANY 類別,其中ANY 表示任意類型,CHIOCE 表示一個或多個可選項的聯(lián)合,如下所示[8]:

        CallEventDetail::=CHOICE{

        mobileOriginatedCall

        mobileTerminatedCall

        LocationService

        }

        對于CHOICE 類別,編碼數(shù)據(jù)時一次只能選定一個元素。CHOICE 類型的解碼函數(shù)為:

        int CHOICE_decode_per(asn_codec_max* opt_codec_max,

        asn_per_data *pd, asn_per_constraints *constraints,

        void **buf)

        6 結(jié) 束 語

        ASN.1 的PER 分層運行庫系統(tǒng)模型的提出,是考慮到目前運行系統(tǒng)存在的弊端,模型嘗試解決傳統(tǒng)ASN.1 運行系統(tǒng)的瓶頸問題,也給出了使用C 語言設計一個ASN.1 智能PER 分層運行庫系統(tǒng)的實現(xiàn)過程。詳細分析PER 編解碼算法,從長度域編解碼算法到基本類型編碼算法,從基本編解碼處理層的實現(xiàn),到構(gòu)造類型編解碼處理層的實現(xiàn),通過PER 可見子類型約束和宏的使用對代碼進行了優(yōu)化。設計實現(xiàn)的軟件可以完成簡單ASN.1 協(xié)議的編解碼功能,對ASN.1 相關(guān)系統(tǒng)有較高的應用價值。為未來實現(xiàn)ASN.1 工具的其他功能打下了基礎,在此基礎上可結(jié)合其他應用語言的特性實現(xiàn)完整的ASN.1 運行庫功能。

        猜你喜歡
        編解碼數(shù)據(jù)類型編碼
        詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
        基于SAR-SIFT和快速稀疏編碼的合成孔徑雷達圖像配準
        《全元詩》未編碼疑難字考辨十五則
        如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
        1553B總線控制器編解碼設計
        子帶編碼在圖像壓縮編碼中的應用
        電子制作(2019年22期)2020-01-14 03:16:24
        大型民機試飛遙測視頻編解碼方法研究
        Genome and healthcare
        基于H.265編解碼的高清視頻傳輸系統(tǒng)研究
        電子測試(2018年18期)2018-11-14 02:30:54
        主流視頻編解碼軟件的硬件性能分析與設計
        計算機工程(2014年6期)2014-02-28 01:27:54
        亚洲色图偷拍自拍亚洲色图| 乱子伦视频在线看| 在线播放国产女同闺蜜 | 国产成版人性视频免费版| 夜夜骚久久激情亚洲精品| 国产又a又黄又潮娇喘视频| 无码国产亚洲日韩国精品视频一区二区三区 | 黑人巨大精品欧美| 无码日韩精品一区二区三区免费| 国产成人综合一区二区三区| 国产高清丝袜美腿视频在线观看| 亚洲成人精品久久久国产精品| 国产人妻熟女高跟丝袜图片| 中文字幕一区二区三区久久网站| 无码AV大香线蕉伊人久久| 沐浴偷拍一区二区视频| 麻豆av一区二区三区| 亚洲一区中文字幕在线电影网 | 亚洲av无码无限在线观看| 亚洲国产人在线播放首页| 成人国产精品免费网站| 亚洲成人精品在线一区二区| 3d动漫精品啪啪一区二区免费| 国产喷水福利在线视频| 亚洲精品一区二区在线播放| 午夜一区二区三区观看| 中国老熟妇自拍hd发布| 国产资源精品一区二区免费| 97久久综合精品国产丝袜长腿| 国产中文三级全黄| 无码国产激情在线观看| 午夜人妻中文字幕福利| 亚洲国产国语在线对白观看| a级毛片成人网站免费看| 国产精品国产三级国产专区5o | 中文字幕亚洲精品久久| 无码人妻精一区二区三区| 丰满少妇又紧又爽视频| 蜜桃传媒免费在线观看| 亚洲娇小与黑人巨大交| 久久精品国产热|