Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用asn.1的结构数组_Arrays_Asn.1 - Fatal编程技术网

Arrays 使用asn.1的结构数组

Arrays 使用asn.1的结构数组,arrays,asn.1,Arrays,Asn.1,我正在学习写asn.1语法。我希望asn.1能够提供编写序列数组的工具。它有一个相同类型的结构模式重复了一次又一次,但略有修改。我想知道ASN.1是否允许我编写数组类型的语法,使其适合于少数语法,而不是编写这个大语法 gamePlayer { gamePlayer { gamePlayer type: user (0) playerDetail { name: player_1 team: red ip: 10.3.3.1

我正在学习写asn.1语法。我希望asn.1能够提供编写序列数组的工具。它有一个相同类型的结构模式重复了一次又一次,但略有修改。我想知道ASN.1是否允许我编写数组类型的语法,使其适合于少数语法,而不是编写这个大语法

gamePlayer {
gamePlayer {
    gamePlayer type: user (0)
    playerDetail  {
        name: player_1
        team: red
        ip: 10.3.3.1
        membership: level_2
    }
}
gamePlayer {
    gamePlayer type: user (0)
    playerDetail  {
        name: player_2
        team: blue
        ip: 10.3.3.2
        membership: level_4
    }
}
gamePlayer {
    gamePlayer type: ai (1)
    playerDetail  {
        name: ai_1
        team: red
        bot: bikeBot
    }
}
gamePlayer {
    gamePlayer type: ai (1)
    playerDetail  {
        name: ai_2
        team: blue
        bot: bikeBot
    }
}
gamePlayer {
    gamePlayer type: ai (1)
    playerDetail  {
        name: ai_3
        team: blue
        bot: carBot
    }
}

}

我会使用
枚举的
作为玩家类型。playerDetail中的差异可以通过
可选
成员解决。游戏玩家的数组将通过
的序列求解

这是ASN.1模块的示例(我还没有测试它是否正确) 游戏玩家模块

DEFINITIONS IMPLICIT TAGS ::= BEGIN

GamePlayers ::= SEQUENCE OF GamePlayer

Gameplayer ::= SEQUENCE {
   type ::=         ENUMERATED
                       {
                          user  (0)
                          ai    (1)

                       },
   playerDetail     PlayerDetail
}

PlayerDetail ::= SEQUENCE {
    name            UTF8STRING,
    team            UTF8STRING,
    ip          [0] UTF8STRING OPTIONAL,
    membership  [1] UTF8STRING OPTIONAL,
    bot         [2] UTF8STRING OPTIONAL
}

END

在ASN.1中,有很多方法可以剥这只猫的皮。单向:

Player ::= SEQUENCE {
    name    UTF8String,
    team    UTF8String,

    humanOrAI CHOICE {
       human [0] HumanInfo,
       ai    [1] AIInfo
    }
}

HumanInfo ::= SEQUENCE {
    ip         OCTET STRING (SIZE (4))
    membership UTF8String
}

AIInfo ::= ENUMERATED { bikeBot, carBot }
使用
CHOICE
可能是将这些项目混合在一起的合适方式。(如果你想让人类接管AI播放器,你可能会考虑会发生什么。)

在大多数协议中,IP地址通常被指定为
OCTET STRING
s,但这只是一个实现细节


有一套很好的在线资源可用于学习ASN。1:请参阅以获取快速信息;书也在网上。Larmouth更容易访问,但Dubuisson可能更全面。

这看起来类似于ASN.1值表示法。与此值对应的类型是什么。另外,ASN.1既没有数组也没有结构。你是说顺序和顺序吗?@Henry:如果所有类型的
玩家
ai
的所有子参数都相同,那么希望顺序会有用。但在这里,只有
name
team
是所有人的共同点;其他参数取决于它是
player
还是
ai