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

时间:2018-07-19 06:25:08

标签: python python-3.x

我有一个用于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读取器可以在必要时使用此字符串作为数据写入新标签。任何帮助将不胜感激

1 个答案:

答案 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