Maison >développement back-end >Golang >Échec du démarshalage de l'ASN
l'éditeur php Xigua est là pour partager avec vous une question sur "l'échec de la démarshallisation". Dans les communications réseau, l'ASN (Autonomous System Number) est un numéro utilisé pour identifier les systèmes autonomes. Cependant, le dégroupage échoue parfois lors du dissociation de l'ASN. Cela peut être dû à un format de codage ASN incorrect, à des paquets ASN endommagés ou à des analyseurs incompatibles. Dans cet article, nous aborderons les raisons et les solutions à l’échec du démobilisation de l’ASN pour aider chacun à mieux comprendre et résoudre ce problème.
package main import ( "encoding/asn1" "fmt" ) type SimpleStruct struct { Value int } 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) }
J'ai essayé de désorganiser mais j'ai obtenu l'erreur suivante :
<code> Error: asn1: structure error: tags don't match (16 vs {class:0 tag:2 length:1 isCompound:false}) {optional:false explicit:false application:false private:false defaultValue: tag: stringType:0 timeType:0 set:false omitEmpty:false} SimpleStruct @2 </code>
Quelqu'un peut-il m'aider ? Merci
0x020105
encode l'entier 5 (voir https://www.php.cn/link/8ae7733f9bc11275e8d0a0fdabe5be0a), il doit donc être non marshalé en un entier, pas une structure avec un champ entier :
package main import ( "encoding/asn1" "fmt" ) func main() { berBytes := []byte{0x02, 0x01, 0x05} var v int _, err := asn1.Unmarshal(berBytes, &v) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Decoded value: %d\n", v) // Output: // Decoded value: 5 }
et SimpleStruct{Value: 5}
被编组为 0x3003020105
:
package main import ( "encoding/asn1" "fmt" ) type SimpleStruct struct { Value int } func main() { simpleStruct := SimpleStruct{Value: 5} buf, err := asn1.Marshal(simpleStruct) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Encoded value: 0x%x\n", buf) // Output: // Encoded value: 0x3003020105 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!