我有一个用于mifare读取器的十六进制命令字符串,其中一个命令示例是
'\ xE0 \ x03 \ x06 \ x01 \ x00'
这将给出16个字节的响应,例如:
'\ x0F \ x02 \ x02 \ x07 \ x05 \ x06 \ x07 \ x01 \ x09 \ x0A \ x09 \ x0F \ x03 \ x0D \ x0E \ xFF'
我需要将这些值存储在文本文档中,但是每当我尝试将十六进制命令转换为字符串时,该字符串将始终更改并且不保留其原始格式,并且该字符串将变为
'\ x0f \ x02 \ x02 \ x07 \ x05 \ x06 \ x07 \ x01 \ t \ n \ t \ x0f \ x03 \ r \x0eÿ'
我尝试通过使用
来更改其格式d = d.encode()
print("".join("\\x{:02x}".format(c) for c in d))
# Result
'\x0f\x02\x02\x07\x05\x06\x07\x01\t\n\t\x0f\x03\r\x0eÿ'
还可以通过更改字符串的编码来实现,但这也不会在解码后提供原始字符串。我想得到的结果就是
'\x0F\x02\x02\x07\x05\x06\x07\x01\x09\x0A\x09\x0F\x03\x0D\x0E\xFF'
这是为了让mifare读取器可以在必要时使用此字符串作为数据写入新标签。任何帮助将不胜感激
答案 0 :(得分:0)
我认为您遇到的问题是python试图将您的数据解释为UTF-8文本,但这是原始数据,因此不可打印。我要做的是hex encode数据以将其打印在文件中,并在读取时将其十六进制解码回去。
类似的东西:
import binascii # see [1]
s = b'\xE0\x03\x06\x01\x00' # 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