Ganzzahlwerte aus dem Byte-Puffer in Golang extrahieren
Sie benötigen eine Technik, um verschiedene Felder aus einem Byte-Puffer in Go zu extrahieren. Während Ihr aktueller Ansatz mit bytes.Buffer und expliziten Offsets dies effektiv erreicht, gibt es potenzielle Verbesserungen, die in Betracht gezogen werden sollten.
Alternative mit Byte Skipping
Um die Erstellung mehrerer zu vermeiden Puffer können Sie bytes.Buffer.Next() verwenden Methode:
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) }
Strukturbasiertes Lesen
Ein alternativer Ansatz besteht darin, eine Header-Struktur zu erstellen und binär zu verwenden.Direkt lesen:
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 }
Das obige ist der detaillierte Inhalt vonWie kann ich ganzzahlige Werte effizient aus einem Byte-Puffer in Go extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!