在Python中将十六进制字符串转换为二进制数据

13

我有一个像FF0000FF这样的数据字符串,我想将它作为原始的8位字节11111111 00000000 00000000 11111111写入文件。然而,当我使用struct.pack时,似乎会得到过多的数据。FF会变成FF 00 00 00,或者我会得到0和1的ASCII文字版本。

如何简单地将十六进制字符串转换为二进制并将其写入文件,以便在十六进制编辑器中查看时可以看到相同的十六进制字符串?


你想要输出二进制的字符串表示,还是输出实际的数值? - aruisdante
我想以二进制格式写出十六进制对的二进制表示形式,作为8位值。 - mike_b
3个回答

18
你需要使用 binascii 模块。

binascii.unhexlify(hexstr)
将十六进制字符串 hexstr 转换为二进制数据并返回。
该函数是 b2a_hex() 的逆运算。hexstr 必须包含偶数个十六进制数字(可以是大写或小写),否则将引发 TypeError 异常。

import binascii
hexstr = 'FF0000FF'
binstr = binascii.unhexlify(hexstr)

2
您可以像这样使用 byteshexfromhex
>>> ss = '7e7e303035f8350d013d0a'
>>> bytes.fromhex(ss)
b'~~005\xf85\r\x01=\n'
>>> bb = bytes.fromhex(ss)
>>> bytes.hex(bb)
'7e7e303035f8350d013d0a'

0
在Python 3.x中,您只需在字符串的修改形式前使用b前缀,然后像这样将其写入二进制文件:
hex_as_bytes = b"\xFF\x00\x00\xFF"
with open("myFileName", "wb") as f: f.write(hex_as_bytes)

抱歉,我忘记转义十六进制字符了。现在已经修复了。 - Motorhead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接