ASN.编解码规则之类型定义.docx

上传人:marr****208 文档编号:133585931 上传时间:2020-05-28 格式:DOCX 页数:14 大小:81.93KB
返回 下载 相关 举报
ASN.编解码规则之类型定义.docx_第1页
第1页 / 共14页
ASN.编解码规则之类型定义.docx_第2页
第2页 / 共14页
ASN.编解码规则之类型定义.docx_第3页
第3页 / 共14页
ASN.编解码规则之类型定义.docx_第4页
第4页 / 共14页
ASN.编解码规则之类型定义.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《ASN.编解码规则之类型定义.docx》由会员分享,可在线阅读,更多相关《ASN.编解码规则之类型定义.docx(14页珍藏版)》请在金锄头文库上搜索。

1、 西安星河亮点信息技术有限公司ASN.1编解码规则之类型定义ASN.1最基本的概念是类型和值,一个类型是一组值的集合,表示潜在的传送信息,实际中,只有值被传送,类型分为简单类型、复合类型、子类型三类;简单类型是ASN.1的基本组成部分,通常用来描述事物的单一属性。复合类型由一个或者多个它的域构成,这些域可以使任意类型,子类型是其父类型的变形,前者的值域是后者值域的子集;简单类型:1. BOOLEAN类型又称布尔类型,有两种可能的取值:“TRUE”和“FLASE”;RRC协议中不存在对此类型的单独定义,一般将其定义在SEQUENCE类型内,具体的定义和赋值方法如下表所示:定义DL-CommonI

2、nformation-r4 := SEQUENCE std-Indicator BOOLEAN, 赋值Example DL-CommonInformation-r4 := tstd-Indicator TRUE, BOOLEAN的编码结果为1个比特:1或者0,分别对应TRUE或者FLASE,因此,tstd-Indicator的编码结果是1(郭丹的论文里面是0);2. NULL类型又称为空类型,表示信息中不包含任何内容,传递时接收方知道与其相关的语义,该类型适合传递报告或者确认消息,和BOOLEAN一样,RRC协议中也不存在对该类型的单独定义,而将其定义在SEQUENCE中,如下表所示:定义Ra

3、dioBearerSetup-r3-IEs := SEQUENCE tdd NULL, 赋值Example RadioBearerSetup-r3-IEs := tdd NULL, 不需要对NULL类型数据进行编码,如果它是CHIOCE或者SEQUENCE的可选域或者缺省域,导言作为此类型的索引来确定是否存在该类型的数据;3. INTEGET类型又称为整数类型,它的值集合是任意长度的整数,可以将该类型数据定义成一个常数,也可以使用子类型限制语句将其值限制在一个区间内取值,定义如下表所示:定义MaxROHC-profile-r4 INTEGER := 8CD-AccessSlotSubchann

4、al := INTEGER(0.11)赋值Example CD- AccessSlotSubchannal := 0如果该类型被定义为常数时,不需要编码,因为解码一方也知道相同的构文,从而可以正确解码,因此MaxROHC-profile-r4的编码结果为空,反之,需要编码,比如CD-AccessSlotSubchannal在有限范围内取值,有12个值可以取,因此用四位比特数来对它进行编码,所以CD-AccessSlotSubchannal的编码结果是0000;4. ENUMERATED类型又称枚举类型,当需要列出对象清单的时候,就要用到该类型,他经常被用来描述系统状态或者错误报告,该类型的定义

5、和复制方法如下表所示:定义RRC-StateIndicator := ENUMERATED Cell-DCH,cell-FACH,cell-PCH,ura-PCH赋值Example RRC-StateIndicator := cell-FACH;有四个选项,因此使用2个比特位来进行编码,RRC-StateIndicator的编码结果是01;5. BIT STRING类型又称为二进制比特串类型,该类型值可以为空或者任意长,常被用来定义那些可以表示为二进制或布尔向量的数据,比特串最左边的比特是第一位,最右边的比特是最末位;该类型的表示有单引号界定,二进制形式由数字0和1组成,后面附加字母B,十六进

6、制形式由数字09和字母AF组成,后面附加字母H,位串的长度应该尽量使用子类型进行限制,因为这能使编码器分配合适的空间,保证编码更加简短,构文如下表所示:定义C-RNTI := BIT STRING(SIZE(16)赋值Example C-RNTI := 0010010000111100B定义AccessServiceClass-FDD := SEQUENCE assignedSubChannelNumber BIT STRINGb3(0),b2(1),b1(2),b0(3) (SIZE(4)赋值Example2 AccessServiceClass-FDD := assignedSubChan

7、nelNumber : 0010B对于固定长度的BITSTRING类型,编码时不需要长度域,编码结果即为比特值,反之要在前面加上长度域,上表中该类型的比特串是固定值的两种定义和相应赋值方式,“example1”和“assignedSubChannelNumber”的编码结果分别为“0010010000111100”和“0010”;6. OCTET STRING类型又称为八位比特串类型,该类型编码时候,比特位后面有时需要填充值为0的比特,以使比特位的位数达到8的整数倍;定义NAS-SystemInformationGSM-MAP := OCTET STRING(SIZE1.8)赋值Example

8、 NAS-SystemInformationGSM-MAP := 31H因为长度是范围是1.8,example的取值是2个8位比特组,因此长度域为“001”,它的完整编码是“00100110001”我觉得是应该是这个00100011001;复合类型1. SEQUENCE类型每个域由小写字母开头的标识符来定义,还可以用OPTIONAL和DEFAULT来标记这些域可选和缺省域,构文如下表所示:定义DL-DCCH-Message := SEQUENCE integrityCheckInfo IntegrityCheckInfo OPTIONAL message DL-DCCH-MessageType

9、赋值N-CR-T-CRMaxHyst := SEQUENCE n-CR integer(1.16) DEFAULT 8 t-CRMaxHyst T-CRMaxHyst对SEQUENCE类型编码是根据从上到下,从外层到内层的顺序依次对内嵌的每个域进行编码,编码时,每个可选域和缺省域都用一个比特的导言来表示是否存在于SEQUENCE类型数据中,分别用“0”、“1”来表示,如果不存在就不对该域进行编码,反之进行编码;DEFAULT后面默认值应该和该域的类型一致,对被它标记的域进行编码时,如果赋值等于其缺省值,则编码时导言为“0”且后面没有对值的编码,如果为“1”,后面有对值的编码,对具有DEFAUL

10、T标记的域进行解码时,如果导言为1,该域的值对应于值域中的值;如果导言为0,该域的值为缺省值;2. SEQUENCE OF类型该类型相当于一些程序设计语言中的动态数组或链表,其内所有的域都是同一类型且数量是可变的,如下表所示:定义IMSI-GSM-MAP := SEQUENCE(SIZE(6.21) OF DigitDigit := INTEGER(0.9)赋值Example IMSI-GSM-MAP := 0, 0, 1, 1, 3, 6, 5 对SEQUENCE OF类型的数据进行编码时,如域的个数是固定的,就没有长度域,否则,用长度域表示域的个数,接下来依次对每个域进行编码,“examp

11、le”的长度域是“0001”,全部的编码结果是“0001 0000 0000 0001 0001 0011 0110 0101”;3. CHIOCE类型该类型有几个域可供选择,具体构文如下表所示:定义TFCS-InfoForDSCH :=CHOICE ctfc2bitINTEGER (0.3), ctfc4bit INTEGER (0.15),ctfc6bitINTEGER (0.63), ctfc8bit INTEGER (0.255),ctfc12bit INTEGER (0.4095), ctfc16bitINTEGER (0.65535),ctfc24bit INTEGER (0.16

12、777215)赋值Example TFCS-InfoForDSCH := ctfc4bit : 3CHIOCE类型首先用导言指示选择哪一个域,化成十进制就是0代表第一项,以此类推,后面紧跟所选项的编码结果,对“example”的编码结果为“001 0011”;子类型在某些情况下,只需要ASN.1类型取值的一些子集是有效的,有时候,只需要一些特定范围内的子集有效,子类型定义是通过在父类型记法后面附加适当的子类型说明来实现的,子类型可用“|”将不同的父类型值域的子集分开,整个表达式位于圆括号内,如下表所示:定义Day := ENUMERATED monday(0), tuesday(1), wed

13、nesday(2), thursday(3), friday(4), saturday(5), sunday(6) 赋值Wednesday := Day (wednesday)WeekEnd := Day (saturday | sunday)上表的子类型一栏中,上面的表达式表示“WeekEnd”类型的取值只有一个值:“wednesday”。下面的表达式表示该类型的取值包括两个值:“saturday” 和“sunday”。TAG类型ASN.1语法的基本构成,即模块,它是认为的将ASN.1构文划分为几个部分,使得构文更加清晰,便于阅读和修改;在ASN.1中,每个类型都有一个相应的Tag,有三种全

14、局TAG模式,前两种为显式定义的EXPLICIT TAGS和IMPLICIT TAGS,另一种叫自动Tag模式AUTOMATIC TAGS;全局Tag模式定义在ASN.1模块中的关键字DEFINITIONS和标号“:=”之间,如下表所示:定义M-one DEFINITIONS IMPLICIT TAGS :=BEGIN ENDM-two DEFINITIONS AUTOMATIC TAGS :=BEGINT := SEQUENCE a INTEGER, b CHIOCE i INTEGER, n NULL, c REALENDM-three DEPINITIONS :=BEGINT := SEQUENCE a0 IMPLICIT INTEGER, b1 E

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号