文件头的二进制读取操作
package main
import (
"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))
}
输出:
成都网络公司-成都网站建设公司创新互联公司十余年经验成就非凡,专业从事成都网站制作、网站设计,成都网页设计,成都网页制作,软文发布平台,一元广告等。十余年来已成功提供全面的成都网站建设方案,打造行业特色的成都网站建设案例,建站热线:13518219792,我们期待您的来电!
本文题目:文件头的二进制读取操作
URL网址:http://ybzwz.com/article/phdddg.html