Dalam senario yang memerlukan pengekstrakan medan tertentu daripada penimbal bait, pembangun kerap menghadapi cabaran dengan cekap dan tepat mencapai ini. Untuk menangani perkara ini, mari kita terokai penyelesaian sedia ada dan pertimbangkan pendekatan alternatif.
Penyelesaian yang disediakan melibatkan mencipta bait.Penimbal untuk setiap medan dan kemudian menggunakan binari.Baca untuk mengisi yang dikehendaki padang. Walaupun berfungsi, pendekatan ini boleh dipertingkatkan dari segi kecekapan dan kependekan kod.
Untuk meningkatkan penyelesaian sedia ada, kami boleh memanfaatkan kaedah .Next() bagi bait.Penimbal untuk melangkau bait yang tidak diingini. Ini menghapuskan keperluan untuk mencipta berbilang penimbal dan membolehkan kod yang lebih ringkas.
p := bytes.NewBuffer(buf) // Skip [8:20) p.Next(12) // 20: uint32 binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock)
Pendekatan alternatif ialah mentakrifkan struktur pengepala yang mewakili pelbagai medan, kemudian baca struktur terus menggunakan binari.Baca. Ini memerlukan penciptaan struktur tersuai, tetapi ia menyediakan penyelesaian yang lebih cekap dan boleh diselenggara.
type Head struct { InodeCount uint32 BlockCount uint32 FirstBlock uint32 BlockSize uint32 BlocksPerGroup uint32 InodesPerBlock uint32 } func main() { var header Head err = binary.Read(file, binary.LittleEndian, &header) if err != nil { log.Fatal(err) } log.Printf("%#v\n", header) }
Pendekatan yang lebih baik menggunakan .Next() menyediakan penyelesaian yang lebih optimum yang memerlukan lebih sedikit peruntukan dan pengulangan kod. Pendekatan struktur pengepala menawarkan perspektif yang berbeza dan boleh berguna apabila berurusan dengan struktur data yang lebih besar atau lebih kompleks.
Atas ialah kandungan terperinci Bagaimana untuk Membongkar Medan Integer dengan Cekap daripada Penampan Byte dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!