Python 3:在打印和格式化时保持十六进制命令字符串的完整性



我有一个mifare阅读器的十六进制命令字符串,其中一个命令是

'\xE0\x03\x06\x01\x00'

这将给出16字节的响应,例如:

'\x0F\x02\x02\x07\x05\x06\x07\x01\x09\x0A\x09\x00F\x03\x0D\x0E\xFF'

我需要将这些值存储在文本文档中,但每当我尝试将十六进制命令转换为字符串时,该字符串总是会发生变化,并且不会保持其原始格式,并且该字符串将变为

'\x0f\x02\x02\x07\x05\x06\x07\x01\t\t\x0f#x3\x0eï'

我试图通过使用来更改它的格式

d = d.encode()
print("".join("\x{:02x}".format(c) for c in d))
# Result
'x0fx02x02x07x05x06x07x01tntx0fx03rx0eÿ'

同样,通过更改字符串的编码,但这也不会在解码后得到原始字符串。因此,我想得到的是

'x0Fx02x02x07x05x06x07x01x09x0Ax09x0Fx03x0Dx0ExFF'

这样mifare阅读器就可以在必要时使用这个字符串作为数据写入新标签。如有任何帮助,将不胜感激

我认为您遇到的问题是python试图将您的数据解释为UTF-8文本,但它是原始数据,因此无法打印。我要做的是对数据进行十六进制编码以将其打印在文件中,并在读取时对其进行十六进制解码。

类似于:

import binascii # see [1]
s = b'xE0x03x06x01x00' # tell python that it is binary data
# write in file encoded as hex text
with open('file.txt','w') as f:
# hexlify() returns a binary string containing ascii characters
# you need to convert it to regular string to avoid an exception in write()
f.write(str(binascii.hexlify(s),'ascii'))
# read back as hex text
with open('file.txt', 'r') as f:
ss=f.read()
# hex decode
x=binascii.unhexlify(ss)

然后

# test
>>> x == s
True

最新更新