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{
if _, err := f.Write([]byte{val});err!=nil{return}
}
}
但是 f.Write 方法写入文件 ASCII 字符串等效,但不是 []byte 值。我需要十六进制值,而不是日志中的字符串。我不明白,为什么代码f.Write([]byte{"string"})
是有效的,但类似的东西f.Write([]byte{fmt.Spirintf("%x", val)})
不能编译......
解决方案
最后,我的工作代码是:
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}
}
推荐阅读
- git - 安全地重命名远程源分支
- mysql - Google Cloud SQL Mysql 5.7 次要版本,如何升级?
- tensorflow - 复合 Poisson Keras 自定义损失函数
- c# - 从多个线程/应用程序同时打印到 Microsoft Print 到 PDF 打印机时出错
- sass - 为什么第一个 Sass 列表项中的“-”字符很重要?
- docker - Docker 正在运行,但我无法访问 localhost - Flask 应用程序
- python - 捕获异常,引发以 sys.exit 结尾的自定义异常
- sql - 在查询中将日期转换为更高效的数字吗?
- entity-framework - 我想添加动态文本框
- python - Dask:跨嵌套列表并行化