22 Bitstring类型标识
22.1 bitstring类型应该使用BitStringType标识引用:
BitStringType ::=
BIT STRING
| BIT STRING “{” NamedBitList “}”
NamedBitList ::=
NamedBit
| NamedBitList “,” NamedBit
NamedBit ::=
identifier “(” number ”)”
| identifier “(“ DefinedValue ”)”
22.2 比特流的第一个比特被称为首比特,最后一个比特被称为尾比特。
注- 该专业用语用语值标识和定义编码规则。
22.3 DefinedValue应该引用一个非负的整型值。
22.4 出现在NamedBitList中的每个number或DefinedValue的值应该是不同的,并且是用语定义bitstring值中的关键比特的数量。比特流的首比特根据是不是数字0来识别最后的比特是否包含连续值。
22.5 NamedBitList中的每个identifier应该是不同的。
注1- NamedBitList中的NamedBit表达式序列的顺序是不重要的。
注2- 因为NamedBitList中的identifier不能用来定义NamedBit的相关值,所以DefinedValue不会被曲解为整型值。例如:
a INTEGER ::= 1
T1 ::= INTEGER {a(2)}
T2 ::= BIT STRING {a(3), b(a) }
最后一个a的值是1,它不会引用第二或第三个a发生的事件。
22.6 NamedBitList的出现对该类型的抽象值集合不会产生影响。值包含指定比特之外的比特是允许的。
22.7 当NamedBitList用来定义bitstring类型的ASN.1编码规则时,允许在值进行编码或解码的时候,在值的尾部增加或减少任意多个0比特。应用设计者应该确保不同的应用场景值的区别仅在与尾部的0的个数。
22.8 该类型标签为universal类型,值3。
22.9 bitstring类型的值应该使用BitStringValue标识定义,或当使用XMLValue时,使用XMLBitStringValue标识定义。表达式如下:
BitStringValue ::=
bstring
| hstring
| “{” IdentifierList “}”
| “{” “}”
| CONTAINING VALUE
IdentifierList ::=
identifier
| IdentifierList “,” identifier
XMLBitStringValue ::=
XMLTypedValue
| xmlbstring
| XMLIdentifierList
| empty
XMLIdentifierList ::=
EmptyElementList
| TextList
EmptyElementList ::=
“<” & identifier “/>”
| EmptyElementList “<” &identifier “/>”
TextList ::=
identifier
| TextList identifier
22.10 XMLValueAssignment只能出现EmptyElementList和TextList中的一种。
22.11 XMLTypedValue选项只有在bitstring值的内容与某个ASN.1类型存在约束关系,且没有定义ENCODED BY。如果使用了该选项,XMLTypedValue应该是ASN.1类型约束的值。
22.12 XMLIdentifierList选项只有在bitstring包含一个NamedBitList的值的时候才能被使用。
22.13 BitStringValue或XMLBitStringValue的identifier的值应该和对应的BitStringType表达式序列的值是相等的。
22.14 empty选项表示bitstring不包含比特。
22.15 如果bitstring包含被命名的bit,BitStringValue或XMLBitStringValue标识使用identifier定义的数字指示1的bit流中的位置,其他比特为0。
注- 对于一个包含NamedBitList的BitStringType,BitStringValue中包含的”{””}”序列和XMLBitStringValue中包含的empty用来表示bitstring不包含任何比特。
22.16 当使用bstring或xmlbstring时,bstring的首比特在左侧,尾比特在右侧。
22.17 当使用hstring标识,每个16进制数字最重要的比特对应bstring中最左侧的比特。
注- 该标识不是用于约束编码规则把bstring转成字符串用于传输。
22.18 hstring标识只在bstring值包含4的整数倍的比特的时候使用。
例如:
‘A98A’ H
和
‘1010100110001010’ B
是相等的比特值。如果类型使用NamedBitList定义,尾数0不是构成值的一部分,所以该值长度是15。如果类型不是使用NamedBitList定义,那么尾数0是值的一部分,该值长度16。
22.19 CONTAINING选项只有在包含CONTAINING选项的bitstring类型内容约束上使用。该值应该是在ContentConstaint中类型的值。(详见X682,第11章)
22.20CONTAINING选项应该在bitstring类型不包含ENCODED BY,并且包含内容约束的时候使用。