- ASN.1中的类型
类型是一个非空的值的集合,可以被编码后 传输。
内建数据类型 | 含义 |
---|---|
INTEGER | 全部整数(包括正数和负数) |
REAL | 实数,表示浮点数 |
ENUMERATED | 标识符的枚举 |
BIT STRING | 比特串 |
OCTET STRING | 字节串 |
NULL | 只包含一个值NULL,用于传送一个报告或者作为CHOICE类型中某些值 |
还有一些,我可能用不到,就不赘述了。
组合类型 | 含义 |
---|---|
CHOICE | 在类型中选择(相当于C中的联合) |
SEQUENCE | 由不同类型的值组成的一个有序的结构(相当于C中的结构体) |
SET | 有不用类型的值组成的一个无序的结构 |
SEQUENCE OF | 由相同类型的值组成的一个有序的结构(相当于C中的数组) |
SET OF | 由相同类型的值组成的一个无序的结构 |
-
类型定义
<新类型的名字>::=<类型描述>
其中:
<新类型的名字>是一个大写字母开头的标识符;
<类型描述>是基于内建类型或在其他地方定义的类型。
如:Married ::= BOOLEAN Age ::= INTEGER Picture ::= BIT STRING From ::= SEQUENCE { name PrintableString, age Age, married Married, marriage-certificate Picture OPTIONAL }
为了接收方能够正确解码,发送方为每个值的类型附加一个数成为tag,在描述中以**[]**标识。如:
Afters ::= CHOICE { cheese [0] PrintableString, desser [1] PrintableString }
注意: ASN.1允许递归式的类型分配,但我们应当保证其中包含至少一个非递归的值。
为了准确描述一个类型,我们需要对值的集合进行一定的限制。这用到了子类型约束,在类型后用圆括号进行标识。
Lottery-number ::= INTERGER(1..49)
Lottery-draw ::= SEQUENCE SIZE(6) OF Lottery-number