ASN.1 如何使用 CHOICE 类型

ASN.1 How to use CHOICE type

我设计了如下模式。

Motorcar ::= SEQUENCE {
    carRegNumber VisibleString
}

Bicycle ::= SEQUENCE {
   bicycleColor VisibleString,
   bicycleModel VisibleString
}

Boat ::= SEQUENCE {
    boatRegNumber VisibleString
}

PreferredVehicle ::= CHOICE { car Motorcar, bicycle Bicycle, boat Boat }

Person ::= SEQUENCE {
    name VisibleString,
    id VisibleString,
    preferredVehicle PreferredVehicle
}

当我在“http://asn1-playground.oss.com/”处编译架构时,它编译成功。

但是当我创建一个类型为 Person 的对象时,出现错误。

myBicycle Bicycle ::= {
    bicycleColor "Blue",
    bicycleModel "Hero 42M"
}

person Person ::= {
    name "Rama Krishna",
    id "I123456",
    preferredVehicle myBicycle
}

谁能告诉我我的架构和数据有什么问题。

我认为实用程序不允许您使用命名的子值。无论如何,这个值似乎工作正常:

person Person ::= {
    name "Rama Krishna",
    id "I123456",
    preferredVehicle bicycle: {
        bicycleColor "Blue",
        bicycleModel "Hero 42M"
    }
}

您的值表示法中缺少 CHOICE 的组成部分。

以下应该有效:

myBicycle Bicycle ::= {
    bicycleColor "Blue",
    bicycleModel "Hero 42M"
}

person Person ::= {
    name "Rama Krishna",
    id "I123456",
    preferredVehicle bicycle : myBicycle
}