2.8 基本类型.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

wsh1288 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档