如何将字节的十六进制表示转换为Python字节值并写入二进制文件?
问题
给定以下十六进制字节序列(例如41对应字符'A'),需要将其转换为Python字节对象(如41转为b'\x41'),后续会将生成的字节写入二进制文件,示例代码如下:
f = open("binary", "wb") f.write(s) f.close()
同时也接受无需生成中间Python字节对象、直接转换写入文件的方案。
十六进制数据:
41 61 30 41 61 31 41 61 32 41 61 33 41 61 34 41 61 35 41 61 36 41 61 37 41 61 38 41 61 39 41 62 30 41 62 31 41 62 32 41 62 33 41 62 34 41 62 35 41 62 36 41 62 37 41 62 38 41 62 39 41 63 30 41
解决方案
方案1:转换为Python字节对象
使用Python内置的bytes.fromhex()方法可以直接将清理后的十六进制字符串转换为字节对象,这是最简洁高效的方式:
# 原始十六进制字符串 hex_data = """41 61 30 41 61 31 41 61 32 41 61 33 41 61 34 41 61 35 41 61 36 41 61 37 41 61 38 41 61 39 41 62 30 41 62 31 41 62 32 41 62 33 41 62 34 41 62 35 41 62 36 41 62 37 41 62 38 41 62 39 41 63 30 41""" # 移除所有空格和换行符,得到连续的十六进制字符串 clean_hex = hex_data.replace(" ", "").replace("\n", "") # 转换为字节对象 byte_obj = bytes.fromhex(clean_hex) # 写入二进制文件(用with语句自动管理文件关闭,避免资源泄漏) with open("binary", "wb") as f: f.write(byte_obj)
方案2:直接写入文件,无需中间字节对象
如果处理的十六进制数据量极大,不想占用内存存储完整的字节对象,可以分块转换并写入:
hex_data = """41 61 30 41 61 31 41 61 32 41 61 33 41 61 34 41 61 35 41 61 36 41 61 37 41 61 38 41 61 39 41 62 30 41 62 31 41 62 32 41 62 33 41 62 34 41 62 35 41 62 36 41 62 37 41 62 38 41 62 39 41 63 30 41""" clean_hex = hex_data.replace(" ", "").replace("\n", "") with open("binary", "wb") as f: # 每2个字符为一组,转换为单个字节写入 for i in range(0, len(clean_hex), 2): chunk = clean_hex[i:i+2] f.write(bytes.fromhex(chunk))
内容的提问来源于stack exchange,提问作者TMOTTM
相关产品推荐
相关产品推荐

