Extraction de valeurs entières d'un tampon d'octets dans Golang
Vous avez besoin d'une technique pour extraire divers champs d'un tampon d'octets dans Go. Bien que votre approche actuelle utilisant bytes.Buffer et des compensations explicites y parvienne efficacement, il existe des améliorations potentielles à considérer.
Alternative avec le saut d'octets
Pour éliminer la création de plusieurs tampons, vous pouvez utiliser bytes.Buffer.Next() méthode :
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) }
Lecture basée sur la structure
Une approche alternative consiste à créer une structure d'en-tête et à utiliser le binaire.Lire directement :
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 }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!