File 如何将十六进制字节写入Go中的文本文件?

File 如何将十六进制字节写入Go中的文本文件?,file,go,File,Go,我想用Go语言将端口I/O操作记录到文本文件中。 我写了这样一个函数: func trace (buffer []byte){ f, err := os.OpenFile("trace.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return } defer f.Close() for _, val := range buffer{

我想用Go语言将端口I/O操作记录到文本文件中。 我写了这样一个函数:

func trace (buffer []byte){

    f, err := os.OpenFile("trace.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        return
    }
    defer f.Close()

    for _, val := range buffer{         
        if _, err := f.Write([]byte{val});err!=nil{return}    
    }
}

但是f.Write方法将ASCII字符串等效值写入文件,但不写入[]字节值。我需要十六进制值,而不是日志中的字符串。我不明白,为什么code
f.Write([]字节{“字符串”})
是有效的,但是类似于
f.Write([]字节{fmt.Spirintf(“%x”,val)})
的东西不编译

如果我正确理解了您的问题,您是在寻找一种解决方案来记录ASCII字符串的十六进制值吗?例如,“41”={0x34,0x31? 如果是,您要查找的代码是:

f.Write([]byte(fmt.Sprintf("%x", buffer )))

最后,我的工作代码是:

func trace (buffer []byte){

    if !Debug{return}

    f, err := os.OpenFile("trace.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        return
    }
    defer f.Close()

    date:=fmt.Sprintf("%v", time.Now().Format("2018-01-02 15:01:02 PM Jan Mon"))

    if _, err := f.Write([]byte(date+"\r\n"));err!=nil{return}

    var counter int = 0

    for _, val := range buffer{
        if counter == 16{
            if _, err := f.Write([]byte("\r\n"));err!=nil{return}
            counter=0
        }

        fmt.Fprintf(f, "%02x ", val)
        counter++
    }

    if _, err := f.Write([]byte("\r\n\r\n"));err!=nil{return}

}

fmt.Spirintf
未编译,因为它拼写为
Sprintf
。只需执行fmt.Fprintf(f,“%02x”,val)
[]字节{“string”}
不是有效的Go代码。Write对它的论点没有什么特别的作用。它只是将字节写入其目标(在本例中为文件)。如果要写入字节的某些表示形式,则必须在调用write之前对其进行适当编码。另外,不要一次只写一个字节;那效率太低了。只需调用f.Write(缓冲区)。