我的理解是,X.691 中的以下语句表示具有单值约束的 INTEGER 类型不会编码任何内容。
13.2.1 如果 PER 可见约束将整数值限制为单个值,则不应向字段列表添加任何内容,从而完成这些过程。
我还了解到 ASN.1 中没有编码任何内容,如下所示。我用 python 中的 asn1tools 测试了它。
Num1 ::= INTEGER (40)
Input: Num1 = 40
Output: b'' (Empty bit string)
当使用联合进行单值约束时,不能保证编码的值始终相同。然而,使用 python 中的 asn1tools 时,不会对任何内容进行编码。
Num2 ::= INTEGER (40 | 50 | 60)
Encoding:
Input: Num2 = 40
Output: b'' (Empty bit string)
Input: Num2 = 50
Output: b'' (Empty bit string)
Input: Num2 = 60
Output: b'' (Empty bit string)
Decoding:
Input: b'' (Empty bit string)
Output: 40
我曾假设它会遵循 ENUMERATED 类型编码,但我没有在 X.691 中找到这一点的基础。
我想知道在上述情况下没有编码是否正确,以及使用联合时它是否不再是单值约束。
如有任何帮助,我们将不胜感激。
这是您所使用的工具的限制...
如果您尝试https://asn1.io/您会发现以下结果
Num2 ::= INTEGER (40 | 50 | 60)
Encoding:
Input: Num2 = 40
Output: b'' (Empty bit string)
Input: Num2 = 50
Output: b'01010000' (0x50)
Input: Num2 = 60
Output: b'10100000' (0xA0)
希望有人能解释如何从 X691 文档中得到它