




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ASN.1 PER编译码规则技术总结1. ASN.1语言简介 ASN.1(Abstract Syntax Notation One)是一种类型描述语言具有类似于面向对象程序设计语言中所提供的类型机制,它可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。 标准包括:ISO 8824-1| ITU-T X.680: Specification of basic notation ISO 8824-2| ITU-T X.681: Information object specification ISO 8824-3| ITU-T X.682: Constraint specificationISO 8824-4| ITU-T X.683: Parameterization of ASN.1ASN.1 特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构。ASN.1 可分为两个部分:语法规则:从数据类型、内容顺序或结构方面来描述消息的内容。编译码规则:如何编译码实际消息的数据。特点:表达简单和复杂类型的能力;类型根据大小或数值进行约束;大写开头表示类型名,小写开头的表示变量名/字段名;字段可以标记为OPTIONAL,便于扩展。2PER 编码简介3GPP的规范中,由ASN.1到传输码的转换统一使用定义在ITU-T X.691中的PER(Packed Encoding Rules)规则,因此这里讲的ASN编译码规则也就是ASN编码中的PER编译码规则。PER 有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu 接口的ASN.1 的传输编码。非对齐方式:仅用于空中(UU)接口的ASN.1转换,两者的编码过程基本相同。 在对齐的方式下,若前面所有单元的信息经编码后得到的比特流长度不是一个八位组的倍数,而后一个信息又是以八位组为单位的(字符串),那么就需要在前面生成的比特流后面补“0”,使其长度为8的倍数。所以一般补的位数为07bit。而非对齐的方式无此限制。所有信息单元按编码规则生成的比特数据将按其被编码的顺序首尾相连,中间不需要任何填充。按ITU-T X.691的规定,若最终的编码结束后。所得的编码不是8的倍数,信息编码结束后的填充由RRC负责。另外,PER编译码必须依赖于3GPP的标准文档。也就是说,收发双方也必须知道层3消息的具体结构,这样编码和译码的才能被编译和识别。2.1编码规则分组编码规则包括三个部分:preamble(前缀)、length(长度)、contents(内容)。其编码格式如图1所示:Preamble|length|Content(1)preamble :它只出现在ENUMERATED、SEQUENCE、SET、CHOICE四种数据结构的编码中。用来记录结构中有无扩展项(extension)、选择项(optional)或缺省项(default)。(2)length : 对STRING、SEQUENCE OF、SET OF等数据类型进行编码时,需对其长度按对齐方式进行编码。(3)contents :若数据是基本结构类型,如:BOOLEAN、INTERGER、REAL、BITSTRING等,即可直接进行编码;若数据是复合结构类型,如SEQUENCE、SET、CHOICE、SEQUENCEOF 等,则属嵌套编码,此时contents中也包含有preamble、length、contents三个部分。(注:在以下举例中,为对齐需要插入0的地方,以(pad)表示)3.2 范围受限的整数类型 INTEGER (lbub)lb为范围的下限,ub为上限,范围N = ub-lb+1。PER针对N的大小不同,采用不同的编码方法,且对整数n进行编码时,以(n-lb)的值进行编码。当N=255时,整数编成不需对齐的18比特;当N256时,编成需对齐的8个比特,当256N=65536时,编成需对齐的16个比特。例如:当ASN.1描述的数据 maximumNestingDepthINTEGER(115)的值为3时,PER编码为0010;g711Alaw64kINTEGER(1256)的值为10时,PER编码为(pad);而当statusDeterminationNumber INTEGER(0)的值为1000,PER编码是(pad)10000。3.3 对象标识符类型 OBJECT IDENTIFEROBJECT IDENTIFER是一种用层次标识符来描述对象的方法;每一层为一标识符,用一个十进制整数表示。例如: protocolIdentifierOBJECT IDENTIFIER 可被赋值为 itu-t(0) recommendation(0) h(8) 245 version (0) 3。protocolIdentifier 由itu-t、recommendation、h245和version 这四层标识符描述;用0, 0, 8, 245, 0, 3十进制整数序列表示。OBJECT IDENTIFER的编码方法为:length+各层标识符编码,其中length值按半约束整数类型编码。PER并不分别对第一层和第二层的标识符整数值进行编码,而是将两层的整数值合并成40*第一层整数值+第二层整数值一个值来进行编码。其他层次标识符整数值被对齐编码为8位比特串;其中首位是标志位,1表示整数值在该比特串没有被编码完,后面接着8位比特串还是原标识符整数值的编码;而0则表示整数值在该比特串编码完毕。如上例:由于0*40+0 =0 ,所以第一二层的标识符被编码为:0000 0000 ;第三层标识符的编码是0000 1000;245无法只用一个8位比特串表示,其编码为 ;剩下的标识符分别被编码为 和。因为各层标识符的编码长度总共为6个字节,所以length=0tocolIdentifier的最后编码是:0x06 0x00 0x08 0x81 0x75 0x00 0x03。3.4 CHOICE 复合类型CHOICE结构中有许多元素,每一个元素均有一个索引号,第一个元素的索引号为0,第二个元素的索引号为1,依次类推,直到最后一个元素n。其编码方法为:索引号+所选元素编码。如果在choice结构内有扩展标记(),则在索引号前增加一个比特位0表示所选项在原列表内;增加一个比特位1表示所选为扩展内容。例如:causeCHOICEunspecifiedCauseNULL,descriptorTooComplexNULL,若cause的值为unspecifiedCause,则PER编码为00。其中第一个0表示所选的不是扩展内容;第二个0表示所选的项为第一项。3.5 SEQUENCE复合类型SEQUENCE结构中可能有扩展标记(),也有可能有些元素为可选项(OPTIONAL)。如果有扩展标记,编码的第一个比特表示有无扩展内容(0表示是非扩展项,1表示为扩展项);随后是若干个比特,其个数等于结构中可选项的个数,分别按位置顺序对应于每一个可选项,值1表示选用对应的可选项,值0表示不选;接着是结构中各个元素的内容编码。例如:H261VideoCapability := SEQUENCEqcifMPIINTEGER(1.4)OPTIONAL,cifMPIINTEGER(1.4)OPTIONAL,temporalSpatialTradeOffCapabilityBOOLEAN,若H261VideoCapability的取值如下qcifMPI3 ,tempralSpatialTradeOffCapabilityTRUE ,则编码表示为,其中第一个0表示无扩展项;第二个1表示qcifMPI选用;第三个0表示cifMPI不选用;接着的10表示qcifMPI的值为3;最后的1表示tempralSpatialTradeOffCapability的值为TRUE。3.6 SET SIZE(lbub) OF和SEQUENCE SIZE(1bub)OF 复合类型其编码形式为:元素个数编码各个元素内容编码;元素的个数按受限整数方式进行编码。例如:AlternativeCapabilitySet:=SEQUENCE SIZE (1256) OF CapabilityTableEntryNumber,CapabilityTableEntryNumber :=INTERGER (165535)若AlternativeCapabilitySet的取值为(1,2)时,则编码为:(pad) 4、RANAP协议描述分析因为对RANAP的ASN.1语法还不是很清楚,以下描述是通过观察数据加上猜测得来,疏漏之处,还请见谅。RANAP-PDU := CHOICE initiatingMessage InitiatingMessage,successfulOutcome SuccessfulOutcome,unsuccessfulOutcome UnsuccessfulOutcome,outcome Outcome,.这是RANAP的PDU的最高结构。我们再来看InitiatingMessage的定义InitiatingMessage := SEQUENCE procedureCodeRANAP-ELEMENTARY-PROCEDURE.&procedureCode (RANAP-ELEMENTARY-PROCEDURES),criticalityRANAP-ELEMENTARY-PROCEDURE.&criticality (RANAP-ELEMENTARY-PROCEDURESprocedureCode),value RANAP-ELEMENTARY-PROCEDURE.&InitiatingMessage (RANAP-ELEMENTARY-PROCEDURESprocedureCode)ProcedureCode := INTEGER (0.255)Criticality := ENUMERATED reject, ignore, notify 我们举一个具体的value的例子CommonID := SEQUENCE protocolIEs ProtocolIE-Container CommonID-IEs ,protocolExtensions ProtocolExtensionContainer CommonIDExtensions OPTIONAL,.ProtocolIE-Container RANAP-PROTOCOL-IES : IEsSetParam :=SEQUENCE (SIZE (0.maxProtocolIEs) OF ProtocolIE-Field IEsSetParamProtocolIE-Field RANAP-PROTOCOL-IES : IEsSetParam := SEQUENCE id RANAP-PROTOCOL-IES.&id (IEsSetParam),criticality RANAP-PROTOCOL-IES.&criticality (IEsSetParamid),value RANAP-PROTOCOL-IES.&Value (IEsSetParamid)可以看出ProtocolIE-Container是一个IE的数组,举一个具体的value作例子PermanentNAS-UE-ID := CHOICE iMSI IMSI,.IMSI := TBCD-STRING (SIZE (3.8)TBCD-STRING := OCTET STRING下面将结合数据来进行详细的解释5、RANAP协议编码分析000f 4010 0000 0100 1740 0950 6400 5513 0000 00f80-因为RANAP-PDU最后有扩展项,这个0表示无扩展-00-RANAP-PDU是个choice,而且有四项,这两个0表示选择的是第一项InitiatingMessage-00000为了对齐填上的0表示这个PDU的类型是个CommonID01-Criticality为第二项ignore-为对齐填上的0 整个InitiatingMessage的value的长度0-表示CommonID没有扩展参数-0-表示CommonID的第一个可选参数没有-为对齐填上的0 ProtocolIE-Container的数量,因为最大值maxProtocolIEs是65536,所以要用16位编码 表示ProtocolIE-Container中的为id-PermanentNAS-UE-ID01-Criticality为第二项ignore-为对齐填上的0整个id-PermanentNAS-UE-ID的value的长度0-表示PermanentNAS-UE-ID无扩展项(因为只有一项,所有没有哪一项的bitmap)-101-表示imsi的长度。5表示该IMSI的长度为8(最小为3,3+5=8)-0000为对齐填上的06400 5513 0000 00f8为IMSI的值3.PER的编码规则总结 一、对整数和域长的编码 在PER编码中,整数的编码和长度L 的编码,在实际的结构类型编码中经常用到,是结构中对类型编码的基础,因此,下面首先讲述这两种编码的规则:1.整数的编码不受限的整数编码不受限整数n的编码是以最小八位组来编码的。它分成对长度的编码和对数的编码两部分,并且都是以八位组为单位来编的,若为负数则以2s-compLetement来编码的(即以补码的形式编)。例(with L: preceding the Length determinant if any - and C: preceding the contents encoding - if any):integer1 INTEGER := 4096integer2 INTEGER (MIN . 65535) := 127integer3 INTEGER (MIN . 65535) := -128integer4 INTEGER (MIN . 65535) := 128其编码为:integer1: L: C: integer2: L: C: integer3: L: C: integer4: L: C: 以上例子可以看出:当下限没有一个具体的值,而表示为一个任意小的数时,这种整数看作是不受限的整数来编码。半受限的整数的编码设nbmin,+,d=nbmin。对n-bmin进行编码。这种编码是以最小八位组来编码的,即为Log256d个八位组。这个八位组的组数Log256d也将作为长度L 来编码。例:integer5 INTEGER (-1. MAX) := 4096integer6 INTEGER (1 . MAX) := 127integer7 INTEGER (0 . MAX) := 128编码为:Integer5: L: C : Integer6: L: C : Integer7: L: C : 受限整数的编码:对于一个整数nbmin ,bmax,d= bmax bmin+1。d=1时,有n=bmax=bmin。这样的整数在发送方和接收方都知道,因此不需要编码。在对齐的方式下:当2d255,对n-bmin 进行编码,是以二进制的最小位来编码的,编码的长度为与d相对应的长度。长度域L不编码。当d=256时,对n-bmin编码,长度为一个八位组,长度域L不编码。当257d65536时,对n-bmin编码,长度为两个八位组,长度域L不编码。当d65537时,对n-bmin编码,编码为最小的八位组数,即为Log256doctets.这个八位组的组数将以受限的整数在编码的前面以L域表示出来。故L的区间为1,Lmax。非对齐的方式下:n-bmin直接编码为二进制的最小位长度,长度域L不编码。例:integer8 INTEGER (3.6) := 3, 4, 5, 6integer9 INTEGER (4000.4254) := 4002, 4006integer10 INTEGER (4000.4255) := 4002, 4006integer11 INTEGER (0.32000) := 0, 31000integer12 INTEGER (1.65538) := 1, 257, 65538其编码如下:integer8 C:00, C:01, C:10, C:11integer9 C:, C:integer10 C:, C: integer11 C: , C: integer12 非对齐方式:C: 0 ,C: 0 ,C: 1 对齐方式:L: 00 C:,L: 01 C: ,L: 10 C: 二进制的最小位长度.可理解为编码所需的比特数,以后赋予的值都将以这个位数来进行编码,这点跟上面的例子是吻合的。而后面的对齐方式是以八位组为单位,根据数所在八位组的范围来确定其表示八位组的个数,但前面要加长度的编码,这种情况在实际应用中见的不多。一般最小的非负整数如果0n63 ,在非八位组对齐方式下(非对齐方式下没有前同步码),前同步码为0,后面六位为n的编码。编码形式为:0 nnnnnn如果n64,在非八位组对齐方式下(非对齐方式下没有前同步码),前同步码位1,L 为长度域,n 作为一个受限的整数来编码(bmin看作0)。编码形式为:1 L n例: 5 L: 0 C:(5 items of content)60 L: 0 C:(60 items of content)254 L: 1 P C:(254 items of content)99000 L: 1 P C:(64K items of content)L: C:(32K items of content)L: C:(696 items of content)2.域长的编码域长L的含义很广泛, 在此可表示为:比特串的长度、八位组的长度(OCTET STRING 和 open types)、对已知字符串的描述、作为元素来描述(如果值为SEQUENCE OF 或 SET OF)等。ASN.1描述规范中,对类型有长度的限制,一般可表示为SIZE(LminLmax),(Lmax可)。长度L作为一个受限或半受限(Lmax)的整数来编码。特别地,当Lmin=Lmax65535时,由于解码者事先知道故不用对L进行编码,类似地,若根据规定,某值不用编码,则长度为NULL ,同样L 不用编码。在对齐方式下:如果L为一个位图的长度,则对L-1和一般的非负整数编码一样。如果Lmax65535时,L编码为一个受限的整数(在区间Lmin.Lmax)。如果Lmax65535(ie.64K)时,或上限Lmax是无限大时:a.如果L127,L编码为一个八位组,最高位为0。即:0 LLLLLLLb.如果128L16383,L编码为两个八位组,高两位为10例如:L=130 10 c.如果L16384,编码分成许多的单元,长度数为f16K,(f =1、2、3、4)分成16384、32768、49152、65536。编码时最高位为两个1,后六位为f值.即将长度L分成几个部分进行编码,下面将用一个例子来说明,L=265536163841 的编码为:11 65536 units 11 65536 units11 16384 units 0 1 unit非对齐方式下:如果L的长度为一个位图,则L-1作为一般的小整数来编码。如果Lmax65536,L-Lmin编码为Log2dbits,d=LmaxLmin1。如果LmaxLmin65534,或Lmax为无限大。a. L127,8bits。0 LLLLLLLb. 128L16383, 编码为16bits。10 LLLLLL LLLLLLLLc. L16384(16K),则和前面的对齐方式一样编码。如果一种类型有一个可扩展长度的限制,并且它被传输的值不遵守扩展限制的规定,这样的长度将以半受限的整数来编码(Lmin=0,Lmax)。二、各种类型编码 PER的编码规则定义了多种数据类型,简单的地可分为两大类。第一类是结构类,如CHOICE、 SEQUENCE 、ENUMERATED 等。另一类是简单类,如INTEGER、 REALL 、BOOLEAN 等。下面将对以下常用的几种类型的编码规则做一个总结: 1. INTEGER整型是规范中用得最多的一种数据类型。对这种数据类型,对齐和非对齐的方式差别很大,特别是当表示数的范围较大时。数的范围一般定义为range=(上界下界+1)。此范围的实际意思是指上下界之间的数的个数。在非对齐的方式下是使用能够描述该整数范围的最少比特来编码的,一般定义为2mrange2m+1,即对该整数的编码为m+1位。对齐方式在数的范围较小(255)时,编码规则与对齐方式相同,而超过此范围则比较复杂。a. 编码规则:一个有范围限制的整型可表示为(bminbmax),如果在ASN.1描述中,整型至少有一个PER的可见限制是可扩展的,那么,在非对齐的方式下必须加一个前同步码,如果赋的值属于源限制的范围之内则同步码为0,否则为1。若n 为即将传输的整数,在对齐和非对齐的方式下n-bmin作为一个受限的整数来编码;当bmax时,将作为一个半受限的整数来编码。若bmin,n的编码为上面提到的2S-compLetement方式编码,长度L也要加进去,L作为一个在区间1;Lmax受限的整数来编码,Lmax=Log2bmax。如果传输的值和属于子扩展项的范围上的数,那么,长度L将作为一个不受限的整数来编码(即对齐的八位组形式),如果值为负的则根据上面的2S-compLetement 形式来编码。例如: v INTEGER (36,810):=8在非对齐的方式下编码为 1 b. 可扩展的整数编码实例:例:integer13 INTEGER (MIN . 65535, ., 65536 . ) := 127, 65536integer14 INTEGER (-1.MAX, ., -20.0 ) := 4096, -8integer15 INTEGER (3.6, ., 7, 8) := 3, 4, 5, 6, 7, 8integer16 INTEGER (1.65538, ., 65539) := 1, 257, 65538, 65539编码为 (the extensions bit has E: placed before it for clarity):integer13: E:0 L: C:,E:1 L: C: integer14: E:0 L: C: ,E:1 L: C:integer15: E:0 C:00, E:0 C:01, E:0 C:10, E:0 C:11,E:1 L: C:,E:1 L: C:integer16: (非对齐方式)E:0 0 ,E:0 0 ,E:0 1 ,E:1 L: C: 对齐方式:E:0 L:00 C:P,E:0 L:01 C:P ,E:0 L:10 C:P ,E:1 L: C: 2. BOOLEAN布尔型编码只须1bit。用“1”表示TRUE,“0”表示FALSE。3. BITSTRING比特串的编码分成两种情况:长度固定:直接将比特串与前面的比特流级连即可;长度可变:按前述整型编码的规则,以描述长度范围最少比特的原则在比特串前面加上用于描述长度所需的比特,然后将待编码的比特串加在后边。如果这种类型有一个可扩展的PER可见SIZE Constraint。则在八位组的非对齐方式下前面加一个同步码。如果串长的长度属于源Constraints Root,则同步码为0。否则为1。(这种情况下,长度将编码为一个半受限的整数)。对于一个BIT STRING(effective constraint),让SIZE(LminLmax)。a. Lmin=Lmax16bits字符串的长度不用传输,在八位组非对齐方式下,将bit string 加在bit域。 b. 17Lmin=Lmax65536bits字符串的长度同上不编码,在对齐方式下,字符串以八位组对齐方式加在bit域。c. Lmin=Lmax65537bits长度L将作为一个受限的整数来编码,即分部分进行编码。d. LminLmax 或者没有SIZE constraint则长度将作为一个受限或半受限的整数(当Lmax)来编码。如果BIT STRING中有以系列的成员名(后面括号里标有位置号),则所有后面的0bits都被移走,另外,当这种类型有SIZE constraint时,后面的0都将被移走或加在编码中,以使达到SIZE 的最小长度。e. 编码实例以下为定义的类型:string1 IA5String (SIZE (6) := string2 IA5String (SIZE (5.20) := string3 IA5String (SIZE (MIN.7) := abcstring4 IA5String := ABCDEFGHstring5 IA5String (SIZE (0.7, ., 8) := abc, abcdefghstring6 IA5String (SIZE (65534.65535) := (65534 chars)string7 IA5String (SIZE (65537) := (65537 chars)其编码为(采用二进制和十六进制):string1: C:P30 31 32 33 34 35string2: L:0001 C:P536 (是以ASCII 码来编的) string3: L:011 C:Pstring4: L: C:64748string5: L:011 C:P,L: C:66768string6: L:0 C:(65534 octets)string7: L: C:(65536 octets) L: C:(1 octet)(采用分成几个部分来编码)4. OCTETSTRING八位组串编码的原则与比特串相同。对于长度可变的组,需在前边增加用于描述长度比特,长度域L是以八位组为单位的。特别地,如果串的固定长度大于两个八位组,在对齐方式下,将以八位组对齐方式来编码。也就是说:若要编码的八位组的个数超过了216个,则以后对长度的编码不是以规定范围之内的比特位数来编,而是编成以八位组为单位。若长度为216+1则编码为: 例如: VALUE :=OCTETSTRING(SIZE(1.8)若长度为3。 则编码为:010,因为长度区间为八,所以长度编码L为3位,而3bmin=2。因此编码为010。后面则跟着3个八位组。5. ENUMERATEDa. 枚举类型的定义EnumerationsRootEnumeration |RootEnumeration”,”,”Exceptionspec | RootEnumeration”,”,”Exceptionspec”,”AdditionalEnumerationRootEnumeration中整数不需要有序也不需连续AdditionaL Enumeration中的整数必须有序但不一定连续,它的每个外在值或定义的参考值应各不相同(与Root Enumeration也应不相同),Additional Enumeration中整数值后面的必须比前面的大。b. 枚举类型编码枚举型的编码类似于整型,也是以描述枚举内全体成员所需比特数最少的原则进行编码。其值的范围从0开始。如果该枚举类型是不可扩展的:被枚举的整数在ASN中根据值的大小升序来存储的。因此,每个值都有一个索引值(从0开始以后每个加1),则枚举的索引值将作为一个在区间0,indexmax的受限整数来编码。如果该枚举类型是可扩展的,或这种模式的开头有EXTENSIBILITY IMPLIED项。在八位组非对齐的方式下,必须加一个前同步码。如果枚举的值取于RootEnumation中,则前同步码为0,值的编码与不扩展时一样对索引值进行编码;如果为扩展项的元素,则前同步码为1,则对除了ROOT值以外的项进行从新索引,然后将索引值将以一个一般的小的非负整数来编码。c. 编码实例enum1 ENUMERATED red(-6), blue(20), green(-8) := red, bLue, greenenum2 ENUMERATED red, blue, green, ., yellow, purple := red, yellow, purple则编码为:enum1: C:01, C:10, C:00(注意索引值的排序与括号里面的值有关)enum2: E:0 C:00,E:1 C:0 (将索引值当成一般小的整数来编码)E:1 C:0 (实际枚举类型编码中,一次只能枚举一项)6. CHOICE选择型的编码类似于整型,以最少的比特来描述选择体内各成员的索引值。值的范围从0开始。与枚举不同的是,编完CHOICE的索引值,紧接着就应编码索引值对应的单元。而枚举型将索引值编完后就结束。下面对这种编码出现的几种类型的编码进行说明:a. 如果选择类型是可扩展的(或者如果这种模式的开头有隐含的扩展), 八位组对齐方式下,在编码的前面加一个1位的同步码。如果选择为其中的一个扩展项,则前同步码为1,否则为0。源选择项的存储是以升序方式进行的,索引值从0开始,以后每个加1。b. 如果CHOICE类型使没有扩展或有扩展但其编码值为其中一个保留的源选择项,则值对其索引值作为一个INTEGER型数进行编码。c. 如果选择类型只有单独一个选项,则索引值不用编码,只对其值进行编码,编码的方式根据定义的类型而定。d. 编码实例:Choice-example := CHOICE normal NULL,high NULL,.medium NULL first-choice Choice-example := normal: NULLsecond-choice Choice-example := medium: NULL编码为:first-choice: E:0 I:0 C: (a total of two bits)second-choice: E:1 (extensions bit set)(前导比特的编码)C: (index as a normally small whole number)(对索引值的编码)L: (general Length wrapper)(对选择项的值的编码)C: (padded encoding of NULL)注意:实际应用的选择类型中一次只能选择一项。7. SEQUENCE一般说来,序列编码后都会产生一个前导位图,用以指示序列中的可选项或缺省项是否存在。每以可选项(或缺省项)用1bit来指示,“1”表示存在,“0”表示不存在。若一个序列型中包含n个标注为可选(或缺省)的成员,那么,前导位图的长度就是n bit。位图中的比特顺序与序列中各可选(或缺省)的成员排列一致。然后再对SEQUENCE 中的各成员进行编码,这种类型对应于C语言中的结构。下面分几种情况来说明:a. 在SEQUENCE中,各个成员类型组成了COMPONENTS OF,如果在SEQUENCE中是可扩展的(或模块开头包含隐含的扩展项),则必须在编码的前面加一个同步码(在八位组非对齐方式下)。如果所取值属于扩展项的内容,则前同步码为1,否则为0。b. 如果类型的源扩展项包含有n个成员标有OPITIONAL 或DEFAULT,则必须加上第二个前同步码,位数为n(若n64K,则分部分来编码)。长度n将作为一个受限的整数来编码Lmin=Lmax=n,位于前同步码之前。每位bit值为1(如果成员以具体值的形式体现),否则为0。c. 在规范的PER 中,如果成员有默认值,不用编码;在基本PER中,一个构造类型的成员(如SEQUENCE 、SET、SEQUENCE OF、SET OF、CHOICE)是否编码取决于发送方的要求(如果有默认值的话),但一般的类型(如:INTEGER REAL BOOLEAN 等)是不用编码的。(目前我实际编码是这样的:若前导位图为0,则不用编出相应的默认值,若前导位图编为1的话,就要对默认值进行编码。)d. 在这些同步码编完之后,将对各个成员进行编码。如果类型是可扩展的,且有p个可扩展项,则p1编码为一个普通的小整数(若n64K,则分部分来编码),后面为一个p bits的位图。当出现的项以值的形式出现则位值为1,否则为0(即看是否标有OPITIONAL或DEFAULT)。e. 当SEQUENCE中有嵌套且有扩展项时,也必须加前同步码。f. 虽然SEQUENCE类型值没有长度域的编码,通过源成员和扩展成员的位图我们能够用来解码并推断出实际的成员值,当然,SEQUENCE 中的成员编码中会有长度域的编码g.编码实例:my-sequence-vaLSEQUENCE item-code INTEGER (0.254),item-name IA5String (SIZE (3.10) OPTIONAL,urgency ENUMERATEDnormal, high DEFAULT normal := item-code 29, item-name SHERRY 则编码为:B:10 (item-name项存在, urgency 项不存在)C: (值29的编码)L:011 C:P 53 48 45 52 52 59 (item-name长度和值的编码)8. SEQUENCE(SIZE(ib.ub)OF componentSEQUENCE-OF在ASN.1描述中用作循环。循环次数由SIZE 确定。SEQUENCE-OF的前导比特为SIZE中数的范围,编码规则与整数型相同。紧跟在前导比特之后的是循环体成员component的编码,各成员编码后顺序放置,每两个成员之间编码值不需分隔符。该类型对应于C语言中的数组。a. 在SEQUENCE OF 类型中,如果有SIZE Constraint。则这种类型是可扩展的,必须加一位前同步码(在八位组非对齐方式下)。如果元素的数字属于源限制里面的值,则前同步码为0。否则为1。b. 如果LminLmax,或者长度不属于源规定的范围之内,则必须对长度L-1进行编码,以说明列表中元素的个数。然后针对其中的各个元素,按顺序进行编码,编码的方式与各元素定义的类型一致。c.编码实例:My-sequence-of SEQUENCE (SIZE(1. 4(3), ., 4) OF INTEGER (0.3, ., 4)My-value-1 My-sequence-of := 1, 3, 4My-value-2 My-sequence-of := 1, 2, 3, 4编码如下:My-value-1: E:0 (extensions bit)L:10 (iteration count of 3)E:0 C:01 (value 1)E:0 C:11 (value 3)E:1 L: C: (value 4)My-value-2:E:1 (extensions bit)L: (iteration count of 4)E:0 C:01 (value 1)E:0 C:10 (value 2)E:0 C:11 (value 3)E:1 L:P C: (value 4)例如:SEQUENCE (SIZE(1.7)OF component若循环6次则在前面的长度编码为101 ,然后再对component进行6次编码。9. NULLNULL类型不用编码。如果值为CHOICE中的一个选项或为SEQUENCE或SET中的一个可选项,那么这些类型中的前同步码中通常提供了足够的关于该值存在性的信息。10. CHARACTER STRINGS a. 如果这种类型是受限的,则有两种情况:SIZE Constraint 如SIZE(LminLmax);alphabet constraint 如FROM(“c1”|“c2”|“cn”)这种类型如果是可扩展的,则它可包含所有类型的字符。b. 在ASN.1模块中,若SIZE Constrain是可扩展的,在八位组的非对齐方式下,需加一个一位的前同步码,如果字符串的长度在源规定的长度之内,则前同步码为0,否则为1。c. PER中对复合字符串类型的编码是尽量压缩的。设n为有效限制字符的个数,b=Log2n、c=Log2b。对齐方式下:每位字符的编码为B=2c位。非对齐方式下:每位字符的编码为b位(以最小可表示的bit来编码)。在列表SIZE(“c1”|“c2”|“cn”)中,每一项对应着一个整数,设Vmax,Vmin为对应这个整数的最大和最小值。如果vmax2B1(即列表中每个字符的编码为B bits时),则字符串中的每个字符编码都和一个在区间VminVmax的整数相关,这样避免了字符串的重新索引,节约了计算资源。另外,若根据规范标准进行重新索引的,索引值从0开始,每个加1,对每个发送字符的编码也为B bits,因此,在这两种情况下,二进制编码的长度为B bits的整数倍。d. 若字符串的长度时固定的(Lmin=Lmax)且小于64K,则长度域L 不用编码,在对齐方式下最终的bit域时八位组对称的(仅当BLmax17时);若字符串的长度时不确定或者大于64K,则长度要编码,且加在比特串的编码之前(在对齐方式下,只有BLmax17时为八位组对称结构)。f. 下面将列举几个实例:v IA5String (FROM (ACGT)SIZE (3) := TAG此种情况的编码为 11 00 10。即根据字母在给定的集合里面的位置码来编写的。v IA5String := TAG上例的非对齐方式的编码为:0| 编码的前同步码为0,其它的编码分别位字母T,A,G及长度的7位编码。对齐的方式编码为:0| 与非对齐的方式不同的是该处的编码是以八位组为单位来编写的。11. 对比特位图的编码 此处为BIT STRING 类型,即为对位图的编码。sync-UL-Codes-BitmapBIT STRING code7(0),code6(1),code5(2),code4(3),code3(4),code2(5),code1(6),code0(7)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林避火知识培训课件
- 森林消防装备介绍
- 梓潼消防知识培训课件
- 2025年电子商务师专业技能认证考试模拟题库及解析
- 骨科膝关节试题与答案
- 桥梁架设培训课件
- 2025年智慧零售店员招聘面试题集
- 2025年游戏开发者面试预测题及设计思路解析
- 夏季消防检查工作方案
- 2025年建筑行业住建部遴选建筑师笔试预测试题及答案
- 2025年公平竞争审查知识竞赛考试练习题库(正式版)含答案
- 2025年重庆市中考英语试卷真题(含标准答案及解析)
- 员工社保补贴合同协议
- (11.7.1)-12.7-肺性脑病病理生理学
- GB/T 1303.4-2009电气用热固性树脂工业硬质层压板第4部分:环氧树脂硬质层压板
- 新编剑桥商务英语
- 普通高中新课程培训讲座《核心素养导向下的高中化学教学设计策略》2020年8月课件
- 科脉解决方案御商
- 高考英语高考核心词汇
- 腹部损伤AbdominalInjury教材课件
- ACS510变频器参数表
评论
0/150
提交评论