尝试在Python 3.6中将十六进制数据输出为可读文本

时间:2018-04-08 13:48:27

标签: python-3.x

我正在尝试从文件中的特定偏移读取十六进制值,然后将其显示为普通文本。从文件中读取数据并将其保存到名为uName的变量,然后打印它,这就是我得到的:

卡名是:b'\ x95 \ xdc \ x00'

以下是代码:

cardPath = str(input("Enter card path: "))
print("Card name is: ", end="")
with open(cardPath, "rb+") as f:
    f.seek(0x00000042)
    uName = f.read(3)
    print(uName)

如何删除我在开始时获得的'b'?如何删除'\ x'以使b'\ x95 \ xdc \ x00'变为95dc00?如果我能做到这一点,那么我想我可以使用binascii将其转换为文本。

我很抱歉,如果我的错误真的很愚蠢,因为我对Python没有多少经验。

1 个答案:

答案 0 :(得分:0)

在python中以 b 开头的字符串是一个字节字符串。 通常,您可以使用decode()str(byte_string,'UTF-8)将字节字符串(即字符串以 b' 开头)解码为字符串。

示例

str(b'\x70\x79\x74\x68\x6F\x6E','UTF-8')
'python'

b'\x70\x79\x74\x68\x6F\x6E'.decode()
'python'

但是,对于您的情况,它在解码期间引发了UnicodeDecodeError。

str(b'\x95\xdc\x00','UTF-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 0: invalid start byte

我想您需要找到文件的编码,然后在打开文件时指定它,如下所示:

open("u.item", encoding="THE_ENCODING_YOU_FOUND")