ASN.1笔记——基本类型详述(转)

ASN.1笔记——2

一.ASN.1基本类型

基本类型汇总表

 

类型

UNIVERSALTag

取值

BOOLEAN

1

TRUE,FALSE

NULL

5

NULL

INTEGER

2

整数

ENUMERATED

10

类型定义中列出的成员

REAL

9

实数

BIT STRING

3

比特串

OCTET STRING

4

八位组串,字节流

OBJECTIDENTIFIER

6

 

RELATIVE-OID

13

 

1.BOLLEAN类型

BOLLEAN类型只有两个值:TRUE和FALSE

2.NULL类型

空类型,只有一个值NULL。作为一种结果,空类型是传输报告和响应的典型情况。

Ack ::= NULL

它经常在时间信息中使用,表示传送时间没有赋值,如:

Clock ::= CHOICE

{

time UTCTime,

out-of-order NULL

}

当时钟电池没有电时,值为:

battery-down Clock ::= out-of-order:NULL

NULL也可以用在表示链表结束的空接点,如:

LinkedList::= SEQUENCE

{

data Data,

next CHOICE

{

linked-list LinkedList,

endNULL

}

}

3.INTEGER类型

(1).ASN.1没有定义整数的范围,因此必要时需要工确定:

Interval::= INTEGER(0..32767)

(2).ASN.1描述中不能出现“-0”

(3).一些情况下,比如为了定义错误码,需要给一些数值特定的名字,可以使协议更易于理解,也改善了应用层和编解码器之间的接口。ASN.1为INTEGER类型提供了一种特殊语法来解决这个问题。以软盘驱动器的错误码为例:

ErrorCode::= INTEGER

{

disk-full(1),

no-disk(-1),

disk-not-formatted(2)

}

stupid-error ErrorCode ::= disk-full

这些名字只能被用于定义ErrorCode类型的值,不能用于其它类型值的定义。命名的整数不需要排序。对于没有命名的整数,还是可以使用的;已经命名的整数,也可以直接使用数字。

4.ENUMERATED类型

即枚举类型

例:

ABRT-diagnostic ::=ENUMERATED

{

no-reason-given(1),

protocol-error(2),

authentication-mechanism-name-not-recognized(3),

authentication-mechanism-name-required(4),

authentication-failure(5),

authentication-required(6),

...

}

(1).不能直接使用()中的数字

(2).注意事项:

<1>按照ASN.1的语义模型,任意两个ENUMERATED类型都是不兼容的。

<2>当一个ENUMERATED类型被IMPORTS到另一个模块中,则其列表中的标识符也被导入,但只能用于该类型值的赋值。

<3>基本列表(在扩展标识符之前)中的值不需要连续,也不需要排序。

<4>扩展列表(在扩展标识符之后)中的值不需要连续,但需要升序排列。

<5>扩展列表中的值不能和基本列表中的值重复,不论该值是明确指定的,还是缺省计算的。

扩展列表中成员的值必须比该列表中前一个成员的值大。(也就是所谓的升序吧)

表示成员值的必须是数字,不能是标识符。

该类型的UNIVERSALTag值为10。

(3).使用扩展标记“...”时,需要注意的是,在扩展标记后的成员,其数值必须是升序排列的;和CHOICE、SEQUENCE和SET不同,在使用扩展标记“...”后,增加新成员时,ENUMERATED类型中不需要使用版本标识“[[]]”,并且只能有一个扩展标记。

5.REAL类型

如:piREAL ::= {314159, 10, -5},其中314159是基数,10是E,-5是指数

REAL从语义上等效于:

SEQUENCE

{

mantissaINTEGER (ALL EXCEPT 0),

baseINTEGER (2|10),

exponentINTEGER

}

实数0不能用三元组的方式给出。我们用PLUS-INFINITYMINUS-INFINITY分别表示“正无穷大”和“负无穷大”,这两个也不能用三元组表示。此外,我们也要注意到ASN.1中的实数只能以2或者10为底(base的约束)。

6.BITSTRING类型

按照ASN.1的定义,BITSTRING长度可以为0。它可以是原始的bit流形式,也可以是布尔向量模型。

(1).比物泫:

numBIT STRING ::=‘00100011’B

(2).布尔向量模型

Rights::= BIT STRING

{

user-read(0),

user-write(1),

group-read(2),

group-write(3),

other-read(4),

other-write(5)

}

group1Rights ::= { group-read, group-write }

当然,也可以之间用码字来赋值:

group2Rights ::= '0011'B

group2Rights ::= '3'H

group3Rights ::= '001100'B

group1,group2,group3的结果是一样的,都指具有group-read和group-write权限,最后两个other权限可以省,而前面的user权限因定位需要不能省。

7.OCTETSTRING类型

与BITSTRING类似,但单位不是比特,而是8位比特

8.OBJECTIDENTIFIER类型

OID是ASN.1规定的一种对象标识符数据类型,用于唯一标识网络中对象的身份,是网络领域对象的身份证。通过OID我们就能得到对象的相关信息和属性。

OID结构是一种树状结构(注册树),不同层次间用“.”隔开,OID名称包括字母和数据形式。

例:internet-id OBJECT IDENTIFIER ::=

{iso(1) identified-organization(3) dod(6) internet(1) }

也可以表示为

internet-id OBJECT IDENTIFIER ::=1.3.6.1

每当一个对象注册到注册树中时,ISO标准ISO9834-1都会对它增加一个相应的文本描述,称之为ObjectDescriptor。

9.字符串类型

Multi指字符串中每个字符编码后所占字节数是否一样

字符串类型一览表

类型名字

Tag

字符表

ESC

Multi

NumericString

18

字符“0”到“9”,空格

 

PrintableString

19

字符“A”到“Z”,“a”到“z”,“0”到“9”,空格,单引号(’),圆括号((,)),加号(+),逗号(,),减号(-),点(.),斜杠(/),冒号(:),等号(=),问号(?)

 

VisibleString

ISO646String

26

[ISOReg] entryno. 6; space

 

IA5String

22

[ISOReg] entryno. 1 & 6;

space, delete

 

TeletexString

T61String

20

[ISOReg] entryno. 6, 87, 102,

103, 106, 107,126, 144, 150,

153, 156, 164,165, 168; space, delete

 

VideotexString

21

[ISOReg] entryno. 1, 13, 72,

73, 87, 89, 102,108, 126, 128,

129, 144, 150,153, 164, 165,

168; space,delete

 

GraphicString

25

all the graphicalsets (called

`G') of [ISOReg];space

 

GeneralString

27

all the graphicalsets (called

`G') and all thecontrol characters

(called `C') of[ISOReg];

space, delete

 

UniversalString

28

[ISO10646-1]

 

BMPString

30

the basicmultilingual plane

[ISO10646-1](65,536 cells)

 

UTF8String

12

[ISO10646-1]

   

 

posted @ 2015-08-25 10:35  hbg-rohens  阅读(2255)  评论(0编辑  收藏  举报