首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用asn.1的结构数组

使用asn.1的结构数组
EN

Stack Overflow用户
提问于 2016-05-02 06:42:05
回答 2查看 976关注 0票数 3

我正在学习写asn.1语法。我希望asn.1提供编写序列数组的工具。它有一个同类型的结构重复一次又一次,但轻微的修改。我想知道ASN.1是否允许我编写数组式的语法,以适应很少的语法,而不是写这个大语法。

代码语言:javascript
复制
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
    }
}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-02 08:03:35

我会将ENUMERATED用于游戏播放器类型。playerDetail中的差异可以通过OPTIONAL成员来解决。游戏玩家的数组将由SEQUENCE OF解决。

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

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2016-05-14 23:28:39

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

代码语言:javascript
复制
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可能是一种让您将这些项目混合在一起的合适方法。(如果你想让人类接管一个人工智能玩家,你可能会考虑会发生什么。)

在大多数协议中,IP地址被指定为OCTET STRING是典型的,但这是一个实现细节。

有一套很好的在线资源可供学习ASN.1:参见本教程获得一些快速的东西;雅茅斯氏杜布松氏病的书籍也在线。拉茅斯更容易接近,但杜布松可能更彻底。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36976371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档