(找到答案。关闭主题)
我正在尝试将存储为字符串的十六进制值转换为十六进制数据。
我有:
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;>'Џщ
UPDATE2
抱歉打扰。答案一直在我的鼻子底下:
data_output = data_input.decode('hex')
write_file(filename, data_output) #just opens a file 'wb', ant write a data in it
给出了我需要的相同结果
答案 0 :(得分:2)
我喜欢使用re.findall
print '\\x' + '\\x'.join(re.findall('.{2}', data_input))
如果您想将字符串实际转换为整数列表,可以这样做:
data = [int(x, 16) for x in re.findall('.{2}', data_input)]
答案 1 :(得分: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 :(得分:0)
>>> int('0x10AFCC', 16)
1093580
>>> hex(1093580)
'0x10afcc'
所以在字符串前加上' 0x'然后做上面的