Rumah >pembangunan bahagian belakang >Golang >Unmarshaling asn gagal

Unmarshaling asn gagal

WBOY
WBOYke hadapan
2024-02-14 16:27:081224semak imbas

解组 asn 失败

editor php Xigua di sini untuk berkongsi dengan anda soalan tentang "unmarshalling asn failed". Dalam komunikasi rangkaian, ASN (Nombor Sistem Autonomi) ialah nombor yang digunakan untuk mengenal pasti sistem autonomi Walau bagaimanapun, kadangkala penyahkumpulan gagal apabila menyahkumpulan ASN. Ini mungkin disebabkan oleh format pengekodan ASN yang salah, paket ASN yang rosak atau parser yang tidak serasi. Dalam artikel ini, kita akan membincangkan sebab dan penyelesaian kegagalan unmarshalling ASN untuk membantu semua orang lebih memahami dan menyelesaikan masalah ini.

Isi soalan

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)
}

Saya cuba unmarshal tetapi mendapat ralat berikut:

<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>

Ada sesiapa boleh tolong? Terima kasih

Penyelesaian

0x020105 mengekodkan integer 5 (lihat https://www.php.cn/link/8ae7733f9bc11275e8d0a0fdabe5be0a ), jadi ia hendaklah dinyahmarshaled dengan integer

ke medan
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
}

dan 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
}

Atas ialah kandungan terperinci Unmarshaling asn gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam