ASN.1筆記——基本類型詳述

一.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類型只有兩個值:TRUEFALSE


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.1INTEGER類型提供了一種特殊語法來解決這個問題。以軟盤驅動器的錯誤碼爲例:

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).使用擴展標記“...時,需要注意的是,在擴展標記後的成員,其數值必須是升序排列的;CHOICESEQUENCESET不同,在使用擴展標記“...”後,增加新成員時,ENUMERATED類型中不需要使用版本標識“[[]]”,並且只能有一個擴展標記。


5.REAL類型

如:piREAL ::= {314159, 10, -5},其中314159是基數,10E-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-readgroup-write權限,最後兩個other權限可以省,而前面的user權限因定位需要不能省。


7.OCTETSTRING類型

BITSTRING類似,但單位不是比特,而是8位比特


8.OBJECTIDENTIFIER類型

OIDASN.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]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章