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

Go语言ASN1反序列化失败求助:标签不匹配错误

问题解决

错误原因

你的ASN.1反序列化报错是因为:Go的encoding/asn1包默认会把结构体解析为ASN.1的SEQUENCE类型(对应标签16),但你提供的berBytes是一个ASN.1 INTEGER类型的数据(标签2),两者标签不匹配导致解析失败。

解决方法

方法1:直接解析到int变量

既然你的BER数据就是单个整数,不需要结构体,直接Unmarshal到int类型变量即可:

package main

import (
    "encoding/asn1"
    "fmt"
)

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var value int
    _, err := asn1.Unmarshal(berBytes, &value)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", value)
}

方法2:给结构体字段添加ASN.1标签

如果必须使用结构体,需要给Value字段添加asn1:"tag:2"标签,明确指定它对应ASN.1的INTEGER类型(标签2):

package main

import (
    "encoding/asn1"
    "fmt"
)

type SimpleStruct struct {
    Value int `asn1:"tag:2"`
}

func main() {
    berBytes := []byte{0x02, 0x01, 0x05}

    var simpleStruct SimpleStruct
    _, err := asn1.Unmarshal(berBytes, &simpleStruct)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Printf("Decoded value: %d\n", simpleStruct.Value)
}

运行上述任一代码,都能正确解析出值5。

内容的提问来源于stack exchange,提问作者ray an

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:32:10