文件头的二进制读取操作
package mainimport ( "encoding/binary" "fmt" "os")type BitmapHeader struct { HeadA byte // B HeadB byte // M Size uint32 // 文件大小 ReservedA uint16 // 0 ReservedB uint16 // 0 OffBits uint32 // 数据偏移}type BitmapInfoHeader struct { Size uint32 // 结构体大小 Width int32 // 宽度 Height int32 // 高度 Planes uint16 // 面, 恒定为1 BitCount uint16 // 每个像素占用的字节数 Compression uint32 // 压缩类型 SizeImage uint32 // 图形大小 XPerlsPerMeter int32 // 水平分辨率 每米的像素数 YPerlsPerMeter int32 // 每米的像素数 ClrUsed uint32 // 颜色数 ClrImportant uint32 // 调色版}func main() { file, err := os.Open("image.bmp") if err != nil { fmt.Println(err) return } var headA, headB byte binary.Read(file, binary.LittleEndian, &headA) binary.Read(file, binary.LittleEndian, &headB) var size uint32 binary.Read(file, binary.LittleEndian, &size) var reserveA, reserveB uint16 binary.Read(file, binary.LittleEndian, &reserveA) binary.Read(file, binary.LittleEndian, &reserveB) var offbits uint32 binary.Read(file, binary.LittleEndian, &offbits) fmt.Println(headA, headB, size, reserveA, reserveB, offbits) infoHeader := new(BitmapInfoHeader) if err := binary.Read(file, binary.LittleEndian, infoHeader); err != nil { fmt.Println(err) return } fmt.Println(infoHeader) // /fmt.Println("size", binary.Size(header), binary.Size(infoHeader))}
输出:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。