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!