文件头的二进制读取操作-创新互联
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))
}
输出:
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
分享标题:文件头的二进制读取操作-创新互联
浏览地址:http://cdiso.cn/article/dcgjco.html