нотация значения для ENUMERATED альтернативы CHOICE - PullRequest
0 голосов
/ 27 апреля 2018

со следующей спецификацией

G-011 DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN 
Payment-method ::= CHOICE {
  check        NumericString(SIZE (15)),
  credit-card  Credit-card,
  cash         NULL
}

Credit-card ::= SEQUENCE {
  type         Card-type,
  number       NumericString(SIZE (20)),
  expiry-date  NumericString(SIZE (6))-- MMYYYY -- 
}

Card-type ::= ENUMERATED {
  cb(0), visa(1), eurocard(2), diners(3), american-express(4)
}

END

Я думал, что значение для платежа с помощью cb будет:

value Payment-method ::= credit-card : cb

Однако http://asn1 -playground.oss.com / не может проанализировать это значение

Что не так с моей ценностью?

EDIT: Боже мой, я недостаточно внимательно прочитал спецификацию (спасибо @Ilya)

value Payment-method ::= credit-card : { 
    type cb, 
    number "01234567890123456789", 
    expiry-date "042018"}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018
value Payment-method ::= credit-card : 
{
    type cb,
    number "00000000000000000000",
    expiry-date "012099"
}

Я получил это, переключив модуль на теги IMPLICIT и просто записав шестнадцатеричный код, и хотел, чтобы он интерпретировал:

3080
  0A0100
  12143030303030303030303030303030303030303030
  1206303132303939
  0000
0 голосов
/ 27 апреля 2018

Вам не хватает поля credit-card.type в записи значений? Потому что cb принадлежит type полю, которое принадлежит credit-card единице.

На более общем замечании тип ENUMERATED - это просто набор именованных целых чисел, а CHOICE - это конечная коллекция типов, которые можно использовать для значений.

...