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

UPER编码中无边界字符串长度超127时的编码规则疑问

关于UPER编码中UTF8String长度用15位而非16位的原因

给定的ASN.1 Schema里,message字段是无约束的UTF8String(未指定SIZE范围),按照UPER(非对齐打包编码规则)的规范,这类字符串的长度编码遵循可变长度的高效编码逻辑,具体原因如下:

  • 分层编码规则:
    UPER针对字符串长度设计了分层编码方案,以最小化编码开销:

    • 当长度小于128(2^7)时,用7位存储长度,最高位设为0(短形式);
    • 当长度在128~32767(2^15-1)区间时,采用「1位标志位 + 15位长度值」的组合:标志位设为1,后续15位直接存储长度的二进制值。
  • 示例匹配逻辑:
    示例中字符串长度为280,二进制是100011000(共9位),正好落在128~32767的区间内。编码后的首16位1000 0001 0001 1000拆解后:

    • 第一位1是标志位,说明后续15位为长度值;
    • 剩余15位000000100011000的十进制值就是280,完全覆盖所需长度信息。
  • 为何不用16位:
    15位的最大可表示值是32767,足够覆盖280的长度需求。UPER的核心设计原则是用最少的位传递有效信息,用1位标志位+15位长度值的方式,既满足了长度范围要求,又避免了16位编码带来的冗余位开销。

内容的提问来源于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.12 10:25:11