登录
首页 >  Golang >  Go问答

将十六进制转换为二进制数据并保存到文件

来源:stackoverflow

时间:2024-02-18 23:12:25 445浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《将十六进制转换为二进制数据并保存到文件》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我尝试在 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, binary.LittleEndian,value)                                    
    s = append(s, value)                                                                     
}

正确答案


如果您的十六进制数据来自字符串,并且您想要写入原始字节,则必须首先对其进行转换,更简单的方法是使用 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。它将给定的字节片写入文件,如果文件不存在则创建该文件,如果文件已存在则截断该文件。

本篇关于《将十六进制转换为二进制数据并保存到文件》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>