dqm7854 2013-05-23 23:18
浏览 221
已采纳

如何使用Go读取文件的前四个字节?

I'm learning Go, and am trying to read the first four bytes of a file. I'm wanting to check if the file contains a specific file header that I'm looking for. My code does not display the bytes that I'm expecting, though. Does anybody know why the following code might not work? It does read in some bytes, but they're not bytes I recognized or expected to see. They're not random or anything, because they're the same every time I run it, so it's probably a pointer to something else or something.

Also, I realize I'm ignoring errors but that's because I went into hack-mode while this wasn't working and removed as much of the cruft as I could, trying to get down to the issue.

package main

import (

    "os"
    "io"
    "fmt"

)

type RoflFile struct {

    identifier []byte

}

func main() {

    arguments := os.Args[1:]

    if len(arguments) != 1 {

        fmt.Println("Usage: <path-to-rofl>")
        return

    }

    inputfile := arguments[0]

    if _, err := os.Stat(inputfile); os.IsNotExist(err) {

        fmt.Printf("Error: the input file could not be found: %s", inputfile)
        return

    }

    rofl := new(RoflFile)
    rofl.identifier = make([]byte, 4)

    // open the input file so that we can pull out data
    f, _ := os.Open(inputfile)

    // read in the file identifier
    io.ReadAtLeast(f, rofl.identifier, 4)

    f.Close()

    fmt.Printf("Got: %+v", rofl)

}
  • 写回答

1条回答 默认 最新

  • doudu22272099831 2013-05-23 23:34
    关注

    When I run your code against an input file beginning with "9876", I get:

    Got: &{identifier:[57 56 55 54]}
    

    When run against an input file beginning with "1234", I get:

    Got: &{identifier:[49 50 51 52]}
    

    For me, the program works as expected. Either something is going wrong on your system, or you don't realize that you're getting the decimal value of the first four bytes in the file. Were you expecting hex? Or were you expecting to see the bytes interpreted according to some encoding (e.g., ASCII or UTF-8, seeing "9 8 7 6" instead of "57 56 55 54")?

    For future reference (or if this didn't answer your question), it's helpful in these situations to include your input file, the output you get on your system, and the output you expected. "They're not bytes I recognized or expected to see" leaves a lot of possibilities on the table.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?