Rumah > pembangunan bahagian belakang > Golang > Unmarshaling asn gagal

Unmarshaling asn gagal

WBOY
Lepaskan: 2024-02-14 16:27:08
ke hadapan
1229 orang telah melayarinya

解组 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)
}
Salin selepas log masuk

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>
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan