You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存在扩展时UPER中CHOICE索引如何编码?dm200编码解析疑问

ASN.1 UPER编码解析:dm200编码细节拆解

场景信息

输入数据(JSON格式)

{
    "messageData": {
        "elementIds": [
            { "dm200": null }
        ]
    }
}

生成的UPER编码结果

0001100000001010101100000000100000000000

已完成的解析

前3位000:对应elementIds的序列长度,规则为实际长度-1,计算得0+1=1,匹配输入的1个元素。

第4位1:标记当前选择的MsgElementId属于扩展组件(即不在根组件集合0-114范围内)。

完整编码拆解(结合UPER规则)

结合给出的ASN.1 Schema和ITU-T X.691的UPER规则,剩余比特解析如下:

1. CHOICE扩展组件的偏移量编码

Schema中MsgElementId的根组件范围是dm0(标签0)到dm114(标签114),dm200的标签为200,属于扩展组件。根据UPER规则,扩展组件需编码标签偏移量:

  • 偏移量计算:目标标签值 - 根组件最大标签值 = 200 - 114 = 86
  • 86的二进制为01010110,这就是编码中对应的8位比特,与你观察到的结果一致。

2. 剩余比特的含义

剩余比特分为两部分:

  • 扩展组件长度标识:第4位之后的10000000用于标识偏移量的存储长度。由于偏移量86需要8位存储,该字段标记后续将用1字节(8位)存储偏移量。
  • 字节对齐填充:编码末尾的00000001000000000000是UPER的对齐填充。UPER要求最终编码结果必须是字节的整数倍,当必要编码比特数未达字节边界时,会填充0至最近的字节边界。

3. NULL类型的编码

由于dm200的类型是NULL,UPER对NULL类型的编码规则为无内容编码,因此不需要额外比特表示NULL的值。

对应的ASN.1 Schema

Messages DEFINITIONS ::=

BEGIN

Message ::= SEQUENCE
    {
    messageData     MessageData
    }
MessageData ::= SEQUENCE
    {
        elementIds      SEQUENCE SIZE (1..7) OF MsgElementId
    }

MsgElementId ::= CHOICE
{
dm0 [0] NULL,
dm1 [1] NULL,
dm2 [2] NULL,
dm3 [3] NULL,
dm4 [4] NULL,
.
.(此部分已截断以简化内容)
.
dm111 [111] NULL,
dm112 [112] NULL,
dm113 [113] NULL,
...,
dm114 [114] NULL,
dm115 [115] NULL,
dm116 [116] NULL,
.
.(此部分已截断以简化内容)
.
dm200 [200] NULL,
dm201 [201] NULL,
dm202 [202] NULL,
dm203 [203] NULL,
dm204 [204] NULL,
dm205 [205] NULL,
dm206 [206] NULL,
dm207 [207] NULL,
dm208 [208] NULL
}   

END

内容的提问来源于stack exchange,提问作者Yash Bhutada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:39:58