Нотация значений ASN.1: присвоение значений разных типов

В ASN.1 некоторые типы имеют один и тот же тип записи значений. Например, значение 'ABCD'H — это шестнадцатеричная строка, которая может представлять либо тип OCTET STRING, либо тип BIT STRING. Точно так же значение 10 — это число, которое может быть либо типа INTEGER, либо типа REAL. Но если мы присваиваем значения переменной, можем ли мы использовать эту переменную в выражении присваивания для совместимого типа?

Например:

MySchema DEFINITIONS AUTOMATIC TAGS ::= 
BEGIN

   x OCTET STRING ::= 'ABCD'H
   y BIT STRING ::= x          -- is this valid?

   i INTEGER ::= 10
   r REAL ::= i                -- is this valid?

END

По крайней мере, одна реализация ASN.1 выдает здесь сообщение об ошибке. Но я не могу найти, что об этом говорит настоящий стандарт.


person Siler    schedule 08.11.2013    source источник


Ответы (1)


Нет, это не законно. Для вашего определения y и r требуется значение BIT STRING и значение REAL соответственно. x является значением OCTET STRING (это не лексическая строка "'ABCD'H"), а i является целым числом (это не лексическая строка "10").

Вы можете обратиться к X.680 16.2 и Приложению C для получения дополнительной информации. 16.2 требует:

Значением, присваиваемым «valuereference» в «ValueAssignment», является «Value», оно управляется «Type» и должно быть обозначением значения типа, определенного «Type» (как указано в 16.3).

Приложение C обсуждает совместимость типов.

person Kevin    schedule 08.11.2013