Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengeluarkan Nilai Integer dengan Cekap daripada Penampan Bait dalam Go?

Bagaimanakah Saya Boleh Mengeluarkan Nilai Integer dengan Cekap daripada Penampan Bait dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-27 19:32:11294semak imbas

How Can I Efficiently Extract Integer Values from a Byte Buffer in Go?

Mengekstrak Nilai Integer daripada Penampan Byte di Golang

Anda memerlukan teknik untuk mengekstrak pelbagai medan daripada penimbal bait dalam Go. Walaupun pendekatan semasa anda menggunakan bait.Penimbal dan ofset eksplisit berjaya mencapai matlamat ini, terdapat potensi penambahbaikan untuk dipertimbangkan.

Alternatif dengan Melangkau Bait

Untuk menghapuskan penciptaan berbilang buffer, anda boleh menggunakan bytes.Buffer.Next() kaedah:

func readSB(buf []byte) {
    p := bytes.NewBuffer(buf)

    binary.Read(p, binary.LittleEndian, &fs.sb.inodeCount)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockCount)
    p.Next(12)
    binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockSize)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.blockPerGroup)
    p.Next(4)
    binary.Read(p, binary.LittleEndian, &fs.sb.inodePerBlock)
}

Bacaan Berasaskan Struktur

Pendekatan alternatif ialah mencipta struktur pengepala dan menggunakan binari.Baca terus:

type Head struct {
    InodeCount      uint32  //  0:4
    BlockCount      uint32  //  4:8
    // Skip fields
    FirstBlock      uint32  // 20:24
    BlockSize       uint32  // 24:28
    // Skip fields
    BlocksPerGroup  uint32  // 32:36
    // Skip fields
    InodesPerBlock  uint32  // 40:44
}

func readSB(buf []byte) {
    var header Head
    if err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &header); err != nil {
        log.Fatal(err)
    }

    // Access data using header fields
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengeluarkan Nilai Integer dengan Cekap daripada Penampan Bait dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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