文件头的二进制读取操作-创新互联

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

其他资讯