如何解决将二进制数据写入文件来自 hexdump
我尝试在 Go 中做一些非常简单的事情,但我找不到任何资源。
我收到了一个 hexadump,我想将它写入一个文件,但两个文件(src 和 dst)的内容根本不匹配。目前我发现的唯一方法是每 2 个字符手动添加 \x
。
我尝试遍历我的字符串并添加 \x
字符串看起来相同但输出非常不同。
此代码手动工作:
binary.Write(f,binary.LittleEndian,[]byte("\x00\x00\x00\x04\x0A\xFA\x64\xA7\x00\x03\x31\x30"))
但我没有设法从字符串“000000040afa64a700033130”中得到它...
我目前在做什么(这是我在 python3 中所做的):
text := "000000040afa64a700033130"
j := 0
f,_ := os.OpenFile("gotest",os.O_WRONLY|os.O_CREATE,0600)
for i := 0; i < len(text); i += 2 {
if (i + 2) <= len(text) {
j = i + 2
}
value,_ := strconv.ParseInt(hex,16,8)
binary.Write(f,value)
s = append(s,value)
}
解决方法
如果您的十六进制数据位于字符串的 from 中,并且您想写入原始字节,则必须先对其进行转换,更简单的方法是使用 hex.Decode
。
import (
"encoding/hex"
"io/ioutil"
)
func foo() {
stringData := []byte("48656c6c6f20476f7068657221")
hexData := make([]byte,hex.DecodedLen(len(stringData)))
_,err := hex.Decode(stringData,hexData)
// handle err
err := ioutil.WriteFile("filename",hexData,0644)
// handle err
}
根据您的使用情况,您可以切换到使用 ioutil.WriteFile
。它将给定的字节切片写入文件,如果文件不存在则创建文件,如果文件已经存在则截断它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。