CN102332018B - 一种Asn.1编码的快速读码方法 - Google Patents
一种Asn.1编码的快速读码方法 Download PDFInfo
- Publication number
- CN102332018B CN102332018B CN 201110279914 CN201110279914A CN102332018B CN 102332018 B CN102332018 B CN 102332018B CN 201110279914 CN201110279914 CN 201110279914 CN 201110279914 A CN201110279914 A CN 201110279914A CN 102332018 B CN102332018 B CN 102332018B
- Authority
- CN
- China
- Prior art keywords
- byte
- spare field
- reads
- length
- value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Communication Control (AREA)
- Detection And Prevention Of Errors In Transmission (AREA)
Abstract
本发明公开一种Asn.1编码的快速读码方法,首先按照Asn.1编码规则读取编码的标识符八位位组,判读该八位位组是否为空闲字段,若不为空闲字段,则按照Asn.1编码规则读取该编码信息的长度八位位组,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回并读取下一条编码信息。否则,预设空闲字段字节长度的初始值为一固定值,最终确定空闲字段的实际长度,再从上一条编码信息的最后一个字节开始跳过相应长度的字节,再返回读取下一条编码信息。本发明解决了现有读码过程中需要依次判断字节是否为空闲字段的方法,能快速确定空闲字段的实际长度,大大提高了读码速度。
Description
技术领域
本发明属于计算机编码数据处理技术领域,具体涉及一种Asn.1编码的快速读码方法。
背景技术
Asn.1(Abstract Syntax Notation One)编码是定义抽象数据类型规格形式的标准,是用于描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。Asn.1编码是通信协议中描述数据传输的正式标记,它与语言实现和物理表示无关,与应用的复杂度无关,尤其适合表示现代通信应用中那些复杂的、变化的和可扩展的数据结构。Asn.1编码的每条编码信息之间相互独立,解码时互不影响,因此在两条编码信息中间插入若干字节完全相同的数据如FF或00,这些数据不包含任何信息且不会影响对信息的正确解码,通常称之为空闲字段。在程序进行解码读码时,如何快速的跳过空闲字段,继续对后续编码信息进行读码和解码,是非常重要的。
目前处理方法是在读码过程中,对每个字节进行逐个判断以确定是否是空闲字段,实际判断次数等于空闲字段的字节数,因此当两个编码信息之间的空闲字段较长时,读码效率非常低下。因此通过一种快速、可靠的读码方法能快速确定编码信息之间空闲字段的长度,使读码效率不会因空闲字段字节长度变化而受到明显影响,在Asn.1解码中显得尤为重要。
发明内容
本发明的目的是提供一种Asn.1编码的快速读码方法,解决了现有读码过程中需要逐个判断字节是否为空闲字段的方法,能快速确定空闲字段的实际长度,大大提高了读码速度。
本发明所采用的技术方案是,一种Asn.1编码的快速读码方法,其特征在于,包括以下步骤:
步骤1、按照Asn.1编码规则读取编码的标识符八位位组,并判读该八位位组是否为空闲字段,若不为空闲字段,则进入步骤2,否则,进入步骤3;
步骤2、按照Asn.1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;
步骤3、预设空闲字段字节长度D的初始值为一固定值L,读取该条编码信息的前L个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/q,再读取该编码信息的前L/q个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/2q,读取该编码信息的前L/2q个字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D的取值的调整规律为依次呈倍数递减,直至读取的字节全部为空闲字段,此时预设空闲字段字节长度D取值L/nq,进入步骤4,其中,L、q和n均为正整数,且L为q的倍数,n=1,2,3...;
步骤4、读取该条编码信息的前L/nq+d个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+2d,读取该条编码信息的前L/nq+2d个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+3d,读取该条编码信息的前L/nq+3d个字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D取值的调整规律为依次等差增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值L/nq+md,进入步骤5,其中,m和d均为正整数,m=1,2,3...;
步骤5、读取该条编码信息的前L/nq+(m-1)d+1个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+(m-1)d+2,读取该条编码信息的前L/nq+(m-1)d+2个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+(m-1)d+3,依次类推,预设空闲字段字节长度D取值的调整规律为依次增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值为L/nq+(m-1)d+z,此时,确定实际空闲字段字节长度为L/nq+(m-1)d+z-1;其中,z为正整数,z=1,2,3...;
步骤6、根据步骤5得到的实际空闲字段字节长度的数值,从上一条编码信息的最后一个字节开始跳过L/nq+(m-1)d+z-1个字节的空闲字段,再返回至步骤1读取下一条编码信息。
步骤3中,q取值为2。
本发明方法首先预设Asn.1编码中相邻两条编码信息之间的空闲字段字节长度,再根据读入字节是否为空闲字段,通过依次呈倍数递减和依次等差增加两种规则调整空闲字段字节长度,通过较少的读取判断次数最终确定实际的空闲字段字节长度,所需的判断次数与现有逐个字节判断次数相比大大减少,在空闲字段字节长度大时效果更加明显。因此,本发明方法简单,结果可靠,能很大程度提高Asn.1编码的读码和解码速度。
附图说明
图1是利用本发明方法进行读码(L=1024且d=16)的字节判断次数示意图;
图2是利用本发明方法进行读码(L=512且d=16)的字节判断次数示意图;
图3是利用本发明方法进行读码(L=1024且d=8)的字节判断次数示意图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
Asn.1编码信息的一个字节为一个八位位组,且第一个字节为标示符八位位组,第二个字节为标示该编码信息字节长度信息的长度八位位组。本发明方法首先按照Asn.1编码规则读取编码的标识符八位位组,并判读该八位位组是否全部为0或F,若不全部为0或F,则判断不是空闲字段而是编码信息,则进入步骤2,进入步骤2后,按照Asn.1编码规则读取该编码信息的长度八位位组,得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息。如果该标识符八位位组全部为0或F,则判断为空闲字段,进入步骤3,在步骤3中预设空闲字段字节长度D的初始值为一固定值,经过步骤3、步骤4和步骤5的数值调整,最终确定两条编码信息之间的实际空闲字段字节长度,在步骤6中,上一条编码信息的最后一个字节开始跳过相应长度的字节,再返回至步骤1读取下一条编码信息。
实施例
本实施例中空闲字段实际长度为546个字节,L=1024,d=16时,Asn.1编码的快速读码方法为:
步骤1、按照Asn.1编码规则读取编码的标识符八位位组,并判读该八位位组是否为空闲字段,若不为空闲字段,则进入步骤2,否则,进入步骤3;
步骤2、按照Asn.1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;
步骤3、预设空闲字段字节长度D为一固定值L,L=1024,读取该条编码信息的前1024个字节并判断读取的字节是否全部为空闲字段;由于读取的字节不全部为空闲字段,将预设空闲字段字节长度D的取值调整为L/q,q=2,L/q=1024/2=512,再读取该编码信息的前512个字节并判断读取的字节是否全部为空闲字段;由于该512个字节全部为空闲字段,此时D取值为512,此时,n=2,进入步骤4;
步骤4、读取该条编码信息的前L/nq+d个字节并判断读取的字节是否全部为空闲字段,d=16,L/nq+d=512+16=528;若读取的字节全部为空闲字段,则将D取值调整为L/nq+2d=528+16=544,读取该条编码信息的前544个字节并判断读取的字节是否全部为空闲字段;由于该读取的544个字节全部为空闲字段,则将D取值调整为L/nq+3d=560,读取该条编码信息的前560个字节并判断读取的字节是否全部为空闲字段,由于读取的该560个字节不全部为空闲字段,此时D取值为560,进入步骤5,其中,m=3;
步骤5、读取该条编码信息的前L/nq+(m-1)d+1=560-16+1=545个字节并判断读取的字节是否全部为空闲字段,由于读取的字节全部为空闲字段,则将D取值调整为546,读取该条编码信息的前546个字节并判断读取的字节是否全部为空闲字段,由于读取的字节全部为空闲字段,则将D取值调整为547,由于读取的字节不全部为空闲字段,此时D取值为547,最后确定实际空闲字段字节长度为L/nq+(m-1)d+z-1=546,此时,z=3;
步骤6、根据步骤5得到的实际空闲字段字节长度为546,从上一条编码信息的最后一个字节开始跳过546个字节的空闲字段,再返回至步骤1读取下一条编码信息。
如图1至图3所示,为利用本发明方法进行Asn.1编码的快速读码方法进行的实验结果示意图,图中横坐标为实际的空闲字段字节长度,纵坐标为读码过程中需要读入字节继而判断是否为空闲字段的次数,其中,图1中,取L=1024且d=16,图2中取L=512且d=16,图3中取L=1024且d=8。
由图1和图2对比可得,当d一定时,L越小,对于空闲字段字节长度大的编码字节判断次数越多,对于空闲字段字节长度小的编码字节判断次数越少。因此,为了减少判断次数以实现本方法的快捷性,当空闲字段的长度普遍较小时,应将L取值相对较小;反之,当空闲字段的长度普遍较大时,应将L取值相对较大。由图1和图3对比可得,在实际空闲字段字节长度稍大于预设空闲字段字节长度的初始取值L时,d取值越小,需要判断的次数越多,因此,当编码中多个空闲字段的长度较为集中时,可将d取值相对较小,反之应将d取值相对较大。
Claims (2)
1.一种Asn.1编码的快速读码方法,其特征在于,包括以下步骤:
步骤1、按照Asn.1编码规则读取编码信息的标识符八位位组,并判读该八位位组是否为空闲字段,若不为空闲字段,则进入步骤2,否则,进入步骤3;
步骤2、按照Asn.1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;
步骤3、预设空闲字段字节长度D的初始值为一固定值L,读取该条编码信息的前L个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/q,再读取该编码信息的前L/q个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/2q,读取该编码信息的前L/2q个字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D的取值的调整规律为依次呈倍数递减,直至读取的字节全部为空闲字段,此时预设空闲字段字节长度D取值L/nq,进入步骤4,其中,L、q和n均为正整数,且L为q的倍数,n=1,2,3…;
步骤4、读取该条编码信息的前L/nq+d个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+2d,读取该条编码信息的前L/nq+2d个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+3d,读取该条编码信息的前L/nq+3d个字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D取值的调整规律为依次等差增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值L/nq+md,进入步骤5,其中,m和d均为正整数,m=1,2,3…;
步骤5、读取该条编码信息的前L/nq+(m-1)d+1个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+(m-1)d+2,读取该条编码信息的前L/nq+(m-1)d+2个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/nq+(m-1)d+3,依次类推,预设空闲字段字节长度D取值的调整规律为依次增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值为L/nq+(m-1)d+z,此时,确定实际空闲字段字节长度为L/nq+(m-1)d+z-1;其中,z为正整数,z=1,2,3…;
步骤6、根据步骤5得到的实际空闲字段字节长度的数值,从上一条编码信息的最后一个字节开始跳过L/nq+(m-1)d+z-1个字节的空闲字段,再返回至步骤1读取下一条编码信息。
2.按照权利要求1所述的Asn.1编码的快速读码方法,其特征在于,步骤3中,q取值为2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110279914 CN102332018B (zh) | 2011-09-21 | 2011-09-21 | 一种Asn.1编码的快速读码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110279914 CN102332018B (zh) | 2011-09-21 | 2011-09-21 | 一种Asn.1编码的快速读码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102332018A CN102332018A (zh) | 2012-01-25 |
CN102332018B true CN102332018B (zh) | 2013-10-23 |
Family
ID=45483794
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110279914 Expired - Fee Related CN102332018B (zh) | 2011-09-21 | 2011-09-21 | 一种Asn.1编码的快速读码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102332018B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105072130B (zh) * | 2015-08-26 | 2018-03-06 | 广州慧睿思通信息科技有限公司 | 一种asn.1解码器代码自动生成方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1635763A (zh) * | 2003-12-26 | 2005-07-06 | 中国电子科技集团公司第三十研究所 | 用于抽象句法表示法高层应用的通用编解码方法 |
CN1992715A (zh) * | 2005-12-31 | 2007-07-04 | 中兴通讯股份有限公司 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
CN101141438A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 消息数据单元的分析方法 |
CN101826962A (zh) * | 2009-10-13 | 2010-09-08 | 北京信安世纪科技有限公司 | 一种数字证书的快速处理方法 |
-
2011
- 2011-09-21 CN CN 201110279914 patent/CN102332018B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1635763A (zh) * | 2003-12-26 | 2005-07-06 | 中国电子科技集团公司第三十研究所 | 用于抽象句法表示法高层应用的通用编解码方法 |
CN1992715A (zh) * | 2005-12-31 | 2007-07-04 | 中兴通讯股份有限公司 | 基于asn.1定义的pdu编解码代码自动生成的实现方法 |
CN101141438A (zh) * | 2007-10-10 | 2008-03-12 | 中兴通讯股份有限公司 | 消息数据单元的分析方法 |
CN101826962A (zh) * | 2009-10-13 | 2010-09-08 | 北京信安世纪科技有限公司 | 一种数字证书的快速处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102332018A (zh) | 2012-01-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101631000B (zh) | 在串行链路中用于编码的链路和线路级分组方案 | |
EP3675398B1 (en) | Check code processing method, electronic device, and storage medium | |
CN101702639B (zh) | 循环冗余校验的校验值计算方法及装置 | |
CN101635611B (zh) | 一种信道译码方法和装置 | |
CN104994128B (zh) | 一种数据编码类型识别及转码方法和装置 | |
CN109587483A (zh) | 码流提取模块 | |
CN103312458B (zh) | 混合编码方法 | |
CN109474281A (zh) | 数据编码、解码方法及装置 | |
CN103036641B (zh) | 数据交换方法、系统及反序列化方法 | |
CN101729198B (zh) | 一种编解码方法、装置及系统 | |
CN102332018B (zh) | 一种Asn.1编码的快速读码方法 | |
CN103078646A (zh) | 字典查询压缩、解压缩方法及其装置 | |
CN107025125B (zh) | 一种原始码流解码方法和系统 | |
US9621388B2 (en) | Method for serial data transmission and system therefor | |
WO2014056703A1 (en) | Secure and lossless data compression | |
CN101442380A (zh) | 基于高速串行接口编码方式的误码率测试方法与装置 | |
CN101478385A (zh) | 发送、接收时钟的方法及传递时钟的装置 | |
CN102737208B (zh) | 一种超高频电子标签译码mmc型数据的方法 | |
CN105099571B (zh) | 一种音频通信方法 | |
CN102970048B (zh) | 一种基于bch码译码的bch码编码参数盲识别方法 | |
EP1834424B1 (en) | Method and device of frame number encoding for synchronization of electronic devices | |
RU153302U1 (ru) | Кодирующее устройство | |
CN103024380B (zh) | 一种数据的熵编码方法和装置 | |
US10742783B2 (en) | Data transmitting apparatus, data receiving apparatus and method thereof having encoding or decoding functionalities | |
CN103929404B (zh) | 一种解析HTTP chunked编码数据的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20131023 Termination date: 20160921 |
|
CF01 | Termination of patent right due to non-payment of annual fee |