呼如林
您可以使用编码/二进制来读/写固定大小的结构。此方法是可移植的,不依赖于内存布局、编译器或 CPU 体系结构。例如:// Note: using uint32 instead of time.Time for decoding.// Convert to time.Time afterwards if needed.type MVHD struct { Version byte Flags [3]byte DateCreatedSecs uint32 DateModifiedSecs uint32 TimeUnit uint32 // time unit per second (default = 600) DurationInUnits uint64 // time length (in time units)}// ..or use binary.BigEndian - whichever is correct for your data.var endian = binary.LittleEndianfunc decode(rd io.Reader) (*MVHD, error) { var header MVHD if err := binary.Read(rd, endian, &header); err != nil { return nil, err } return &header, nil} 用于将 转换为 .这将允许您使用 mmap 数据。bytes.NewReader[]byteio.Readerdecode或者,您可以手动对其进行解码:func decode2(buf []byte) (*MVHD, error) { if len(buf) < 24 { return nil, errors.New("not enough data") } return &MVHD{ Version: buf[0], Flags: [3]byte{buf[1], buf[2], buf[3]}, DateCreatedSecs: binary.LittleEndian.Uint32(buf[4:8]), DateModifiedSecs: binary.LittleEndian.Uint32(buf[8:12]), TimeUnit: binary.LittleEndian.Uint32(buf[12:16]), DurationInUnits: binary.LittleEndian.Uint64(buf[16:24]), }, nil}同样,您可以使用二进制文件就地更新数据。字节顺序调用:Putfunc updateDateModified(buf []byte, t uint32) error { if len(buf) < 12 { return errors.New("not enough data") } binary.LittleEndian.PutUint32(buf[8:12], t) return nil}