golang转换bin文件大小端

aside section._1OhGeD · · 1243 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import (
    "encoding/binary"
    "fmt"
    "io/ioutil"
    "os"
    "runtime"
    "strings"
    "time"
)

const (
    TargetFeature = "_zys"
)

func getSrcTargetFileMap(path string) (res map[string]string) {
    res = make(map[string]string)
    dirs, err := ioutil.ReadDir(path)
    if err != nil {
        fmt.Println("read path : " + path + " error, please check input path")
    }
    for _, dir := range dirs {
        fileName := dir.Name()
        fileNameTrimSuffix := strings.Split(fileName, ".")[0]
        if strings.Count(fileName, ".") != 1 {
            continue
        }
        if strings.HasSuffix(fileName, "bin") && !strings.HasSuffix(fileNameTrimSuffix, TargetFeature) {
            res[fileName] = fileNameTrimSuffix + TargetFeature + ".bin"
        }
    }
    return
}

// func getBinSize(path string) (size int64, err error) {
//  fileInfo, err := os.Stat(path)
//  if err != nil {
//      fmt.Println(err)
//  }
//  size = fileInfo.Size()
//  return
// }

func convert(srcFile, tarFile, curPath string, tmpChan chan int) {
    srcFilePath := curPath + "/" + srcFile
    tarFilePath := curPath + "/" + tarFile
    binContent, _ := ioutil.ReadFile(srcFilePath)
    for i := 0; i < len(binContent); i += 2 {
        tmp := binary.LittleEndian.Uint16(binContent[i : i+2])
        binary.BigEndian.PutUint16(binContent[i:i+2], tmp)
    }
    err := ioutil.WriteFile(tarFilePath, binContent, os.ModePerm)
    if err != nil {
        fmt.Println(err)
    }
    tmpChan <- 1
}

func main() {
    t1 := time.Now()
    runtime.GOMAXPROCS(runtime.NumCPU())
    curPath, err := os.Getwd()
    if err != nil {
        os.Exit(1)
    }
    files := getSrcTargetFileMap(curPath)

    var fileNumChan = make(chan int)

    for srcFile, tarFile := range files {
        go convert(srcFile, tarFile, curPath, fileNumChan)
    }
    for i := 0; i < len(files); i++ {
        <-fileNumChan
    }
    t2 := time.Since(t1)
    fmt.Println(t2)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section._1OhGeD

查看原文:golang转换bin文件大小端

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1243 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传