我有一个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