我想使用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字符串等效,但不是[]字节值。我需要十六进制值,而不是我日志中的字符串。我无法理解为什么代码f.Write([]byte{"string"})
有效,但像f.Write([]byte{fmt.Spirintf("%x", val)})
这样的东西不能编译......
答案 0 :(得分:0)
如果我正确理解了您的问题,那么您是否正在寻找写入以记录ASCII字符串的十六进制值的解决方案?恩。 " 41" == {0x3 4 ,0x3 1 }? 如果是这样,您要查找的代码是:
f.Write([]byte(fmt.Sprintf("%x", buffer )))
答案 1 :(得分:0)
最后,我的工作代码是:
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}
}