- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.8 基本类型.doc
2.8 基本类型
Table 2-4 基本类型汇总表
类型 UNIVERSAL Tag 取值 BOOLEAN 1 TRUE,FALSE NULL 5 NULL INTEGER 2 整数 ENUMERATED 10 类型定义中列出的成员 REAL 9 实数 BIT STRING 3 比特串 OCTET STRING 4 八位组串,字节流 OBJECT IDENTIFIER 6 ? RELATIVE-OID 13 ? ?
2.8.2 BOOLEAN类型
是两个值的集合:TRUE,FALSE。如下:
RoundResult ::= BOOLEAN
ok RoundResult ::= TRUE
ko RoundResult ::= FALSE
UNIVERSAL的Tag值为1。
2.8.3 NULL类型
空类型,只有一个值NULL。作为一种结果,空类型是传输报告和响应的典型情况。
Ack ::= NULL
它也在时间信息中使用,表示传送时间没有赋值,如:
Clock ::= CHOICE
{
time UTCTime,
out-of-order NULL
}
当时钟电池没有电时,值为:
battery-down Clock ::= out-of-order:NULL
NULL也可以用在表示链表结束的空接点,如:
Figure 2-3 链表结构示意图
LinkedList ::= SEQUENCE
{
data Data,
next CHOICE
{
linked-list LinkedList,
end NULL
}
}
当然,可以使用SEQUENCE OF来达到类似目的:
LinkedList ::= SEQUENCE OF Data
?
UNIVERSAL的Tag值为5。
2.8.4 INTEGER类型
整数,可以是正整数也可以是负整数,取值范围在协议中没有界定。所以必须由编解码器提前确定好整数的范围,分配必要的内存空间来处理。可以通过在描述中增加一个值声明来判断:
Interval ::= INTEGER(123456789..123456790)
在使用PER编解码规则时,会按照本地整数范围进行截断;相比之下BER编码规则中因为有明确的长度,所以不会出现截断的情况。
虽然在数学可以有“-0”,但在ASN.1描述中不能这样描述。
?
一些情况下,比如为了定义错误码,需要给一些数值特定的名字,可以使协议更易于理解,也改善了应用层和编解码器之间的接口。这些信息当然可以用注释给出,但是ASN.1编译器不会使用这些信息,在词法分析开始,这些就都被忽略了。ASN.1为INTEGER类型提供了一种特殊语法来解决这个问题。以软盘驱动器的错误码为例:
ErrorCode ::= INTEGER
{
disk-full(1),
no-disk(-1),
disk-not-formatted(2)
}
stupid-error ErrorCode ::= disk-full
这些名字只能被用于定义ErrorCode类型的值,不能用于其它类型值的定义。
命名的整数不需要排序。对于没有命名的整数,还是可以使用的;已经命名的整数,也可以直接使用数字:
ok ErrorCode ::= 0
stupid-error ErrorCode ::= 1
注意:这种命名使用的使花括号,不是约束(使用圆括号)。
?
这种方式和ENUMERATED类型相比,区别在于:
??????????? 必须指定数值,不能像ENUMERATED中那样缺省;
??????????? 不能使用扩展标记“…”。当然这实际上不是个问题,和ENUMERATED不同,没有命名的整数还可以使用。
此外,这种方式如果使用不当,会造成混乱,要特别小心。如:
alpha INTEGER ::= 1
Type1 ::= INTEGER { alpha(2) }
Type2 ::= INTEGER { alpha(3), beta(alpha) }
gamma Type2 ::= beta
delta Type2 ::= alpha
实际上gamma的值为1,delta的值为3。
?
注意:在ASN.1中,INTEGER和REAL类型之间没有兼容性,就是说不能将INTEGER的值赋给一个REAL类型的值。同样的,INTEGER和ENUMERATED类型间也不存在兼容性。
?
UNIVERSAL的Tag值为2。
2.8.5 ENUMERATED类型
ENUMERATED类型与INTEGER类型相比, 区别在于:
??????
文档评论(0)