利用python将本地Hex文件转换为Bin文件计算bin的CRC和Hash

第一篇博客将HEX文件成功转成了bin文件,这篇博客在前面的代码上对Bin文件进行处理,

计算bin文件的CRC值和Hash值

第一步导入hashlib库和crc库在导入库之前确保你已经安装了这两个包。

import hashlib
import crcmod  
class HEX_BIN(object):
    def TRANS(self,File_path_hex,File_path_bin):
        ih = IntelHex()
        ih.fromfile(File_path_hex, format='hex')
        binary_data = ih.tobinarray()
        with open(File_path_bin, 'wb') as bin_file:
            bin_file.write(bytes(binary_data))
        #print(binary_data)

    def CRC_XML(self,File_path_bin,file_path_xml):
        # 创建一个 CRC 模块
        crc32_func = crcmod.mkCrcFun(0x104c11db7, initCrc=0xFFFFFFFF, xorOut=0xFFFFFFFF)
        # 从二进制文件加载数据
        with open(File_path_bin, 'rb') as bin_file:
            binary_data = bin_file.read()

        # 计算 CRC 值
        crc_value = crc32_func(binary_data)

        # 输出 CRC 值
        #print(f"CRC32 Value: {hex(crc_value)}")

        # 创建 XML 元素
        root = ET.Element("CRCData")
        crc_element = ET.SubElement(root, "CRC32")
        crc_element.text = hex(crc_value)
        # 创建 XML 对象
        tree = ET.ElementTree(root)
        # 保存 XML 文件
        tree.write(file_path_xml)

    def BIN_HASH(self,file_path_bin,file_path_hash,hash_algorithm):
        # 选择哈希算法
        hash_function = hashlib.new(hash_algorithm)

        # 以二进制方式打开文件并逐块更新哈希值
        with open(file_path_bin, 'rb') as file:
            block_size = 65536  # 64 KB
            file_block = file.read(block_size)
            while len(file_block) > 0:
                hash_function.update(file_block)
                file_block = file.read(block_size)

        with open(file_path_hash, 'w') as hash_file:

             hash_file.write(hash_function.hexdigest())
        # 返回十六进制表示的哈希值
       # return hash_function.hexdigest()


if __name__=="__main__":
    #本地的hex文件地址
    file_path_hex=   'C:\\Users\\Administrator\\Desktop\\12345\\1.hex'
    #想要保存的Bin文件地址
    file_path_bin=   'C:\\Users\\Administrator\\Desktop\\12345\\1.bin'
    file_path_xml=   'C:\\Users\\Administrator\\Desktop\\12345\\1.xml'
    file_path_hash = 'C:\\Users\\Administrator\\Desktop\\12345\\hash.txt'
    hash_algorithm = 'sha256'
    U = HEX_BIN()

    U.TRANS(file_path_hex,file_path_bin)
    U.CRC_XML(file_path_bin,file_path_xml)
    U.BIN_HASH(file_path_bin,file_path_hash,hash_algorithm)

运行上诉代码可以发现,在本地文件夹12345中生成了3个文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是一种简单易学的编程语言,它可以在很多领域应用,其中包括对文件进行格式转换。在这里,我们讨论如何使用Python将十六进制文件(.hex转换为二进制文件(.bin)。 首先,我们需要打开 .hex 文件,并读取其内容。这可以通过 Python 内置的 open 函数和 read 方法实现。接下来,我们需要将十六进制数据转换为十进制数据,再将其转换为二进制数值。这可以通过使用 Python 内置的 int 函数,并指定数值的进制格式实现。例如,将十六进制数据转换为二进制数据,我们可以使用以下代码: with open('input.hex', 'r') as hex_file: hex_data = hex_file.read().strip() bin_data = bin(int(hex_data, 16))[2:].zfill(8) 此处我们先打开名为 input.hex文件,然后使用 read 方法读取文件内容,并使用 strip 方法去除多余的空白字符。接下来,我们使用 int 函数将十六进制数据转换为十进制数据,将进制格式指定为 16。最后,我们使用 bin 函数将十进制数据转换为二进制数据,并使用 zfill 方法将二进制数值进行填充,以至于每个二进制数值都占据 8 位。 最后,我们需要将二进制数据写入一个新的文件中。这可以通过 Python 的标准写文件流实现。例如,我们可以使用以下代码将二进制数据写入 output.bin 文件中: with open('output.bin', 'wb') as bin_file: bin_file.write(bin_data) 此处我们使用 wb 模式打开文件,以确保二进制数据正确地写入文件。然后,我们使用 write 方法将二进制数据写入文件中。在代码运行完成后,我们将会得到一个名为 output.bin文件,其中包含了转换后的二进制数据。 ### 回答2: Python中,将十六进制的字符串转换为二进制的字符串可以使用binascii库中的unhexlify函数。unhexlify函数可以将十六进制的字符串转换为二进制格式。例如如果有一个十六进制的字符串“DEADBEEF”,那么使用unhexlify方法可以将其转换为二进制的字符串格式b"\xDE\xAD\xBE\xEF"。 首先,在Python中需要先打开hex文件,读取其中的内容。可以使用open函数读取文件内容,再使用read函数将文件内容读取出来。 ```python with open('file.hex', 'r') as f: content = f.read() ``` 接着,将读取到的十六进制字符串内容转换为二进制格式。可以使用binascii库中的unhexlify函数。 ```python import binascii binary_content = binascii.unhexlify(content) ``` 最后,将转换后的二进制内容写入到目标文件中。 ```python with open('file.bin', 'wb') as f: f.write(binary_content) ``` 完整的代码如下所示: ```python import binascii with open('file.hex', 'r') as f: content = f.read() binary_content = binascii.unhexlify(content) with open('file.bin', 'wb') as f: f.write(binary_content) ``` 以上就是在Python中进行hex2bin文件格式转换的方法。 ### 回答3: Python是一种非常强大且高效的编程语言,在许多数据处理和文件格式转换方面都有很好的表现。在Python中,将十六进制数转换为二进制数是一项很常见的任务,尤其是在处理文件格式转换时。下面将介绍如何使用Pythonhex2bin文件格式转换Python中,需要使用binascii模块来进行二进制数转换。首先,需要读取原始文件并将其转换为一个十六进制字符串。然后,可以使用binascii.unhexlify()函数将十六进制字符串转换为二进制数。最后,将二进制数写入目标文件即可完成转换。 下面是一个Python实现的例子代码: ```python import binascii # 读取原始文件 with open('original_file.hex', 'r') as f: hex_str = f.read() # 将十六进制字符串转换为二进制数 bin_data = binascii.unhexlify(hex_str) # 将二进制数写入目标文件 with open('target_file.bin', 'wb') as f: f.write(bin_data) ``` 在这个例子中,我们假设原始文件名为original_file.hex,目标文件名为target_file.bin。使用Python的with语句,可以很容易地打开文件,并在操作完成后自动关闭文件。在读取原始文件的过程中,我们使用了文件读取函数read(),将整个文件读取到一个字符串中。在将字符串转换为二进制数时,使用了binascii.unhexlify()函数。 最后,在写入目标文件时,我们使用了文件写入函数write(),并以二进制模式打开文件,即wb模式。这是因为在写入二进制文件时,不能使用文本模式,必须使用二进制模式。如果使用文本模式,会导致在写入文件时产生额外的字符。 总之,使用Python文件进行hex2bin格式转换是一项简单而常见的任务。通过上述代码,可以在Python中轻松完成这一工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值