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
相关产品推荐
相关产品推荐

