Arrays 使用asn.1的结构数组
我正在学习写asn.1语法。我希望asn.1能够提供编写序列数组的工具。它有一个相同类型的结构模式重复了一次又一次,但略有修改。我想知道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
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
。