0

ASN.1 对准确性的定义是:

Accuracy ::= SEQUENCE {
    seconds     INTEGER          OPTIONAL,
    millis  [0] INTEGER (1..999) OPTIONAL,
    micros  [1] INTEGER (1..999) OPTIONAL  }

我不清楚的是如何处理millis和micros。将 SEC_ASN1_INTEGER 通用标记和 0 和 1 标记放在 SEC_ASN1Template 结构的同一“种类”字段中是行不通的,因为它们都将进入该字段的同一部分(最低字节)。

4

1 回答 1

1

注意

millis [0] INTEGER (1..999) OPTIONAL

不是真正的 INTEGER 类型,而是 [0] 类型。

也许以下等效类型定义可能会对您有所帮助:

Accuracy ::= SEQUENCE {
    seconds     AccuracySeconds      OPTIONAL,
    millis  [0] AccuracyMilliseconds OPTIONAL,
    micros  [1] AccuracyMicroseconds OPTIONAL  }

AccuracySeconds ::= INTEGER
AccuracyMilliseconds ::= INTEGER(1..999)
AccuracyMicroseconds ::= INTEGER(1..999)

如果您的类型定义使用 IMPLICIT 标记或 EXPLICIT 标记,还需要考虑...编码会有所不同:

(隐式)

30 06
   01 01 02
   80 01 02

vs(显式)

30 08
   01 01 02
   A0 03
      02 01 02
于 2015-02-19T16:36:44.953 回答