Python:将存储为字符串的十六进制值转换为十六进制数据

0 投票
3 回答
1823 浏览
提问于 2025-04-18 20:30

(问题已经解决,可以关闭这个话题)

我想把存储为字符串的十六进制值转换成十六进制数据。

我现在有:

data_input = 'AB688FB2509AA9D85C239B5DE16DD557D6477DEC23AF86F2AABD6D3B3E278FF9'

我需要:

data_output = '\xAB\x68\x8F\xB2\x50\x9A\xA9\xD8\x5C\x23\x9B\x5D\xE1\x6D\xD5\x57\xD6\x47\x7D\xEC\x23\xAF\x86\xF2\xAA\xBD\x6D\x3B\x3E\x27\x8F\xF9'

我尝试过 data_input.decode('hex')binascii.unhexlify(data_input),但是它们返回的结果都是:

"\xabh\x8f\xb2P\x9a\xa9\xd8\\#\x9b]\xe1m\xd5W\xd6G}\xec#\xaf\x86\xf2\xaa\xbdm;>'\x8f\xf9"

我应该写什么才能得到所有字节以 '\xFF' 的形式显示呢?


更新

我需要以 '\xFF' 的形式表示这些数据,以便将它们写入文件(我用 'wb' 模式打开文件),像这样:

«hЏІPљ©Ш\#›]бmХWЦG}м#Ї†тЄЅm;>'Џщ

更新2

抱歉打扰了。答案一直就在我眼前:

data_output = data_input.decode('hex')
write_file(filename, data_output)  #just opens a file 'wb', ant write a data in it

给出的结果和我需要的结果是一样的

3 个回答

0
>>> int('0x10AFCC', 16)
1093580
>>> hex(1093580)
'0x10afcc'

所以在你的字符串前面加上'0x',然后再进行上面的操作。

1

这是一种效率不高的解决办法,不过总是有办法可以尝试:

flag = True
data_output = ''
for char in data_input:
    if flag:
        buffer = char
        flag = False
    else:
        data_output = data_output + '\\x' + buffer + char
        flag = True

编辑:希望这是最后一次编辑。谁知道我在这么简单的循环上会出错这么多次呢?现在应该能正常运行了……

2

我喜欢用 re.findall 把字符串切割成固定宽度的小块。

print '\\x' + '\\x'.join(re.findall('.{2}', data_input))

如果你想把这个字符串真正转换成一个整数的列表,可以这样做:

data = [int(x, 16) for x in re.findall('.{2}', data_input)]

撰写回答