Python 3.6中如何将十六进制数据转为可读文本并去除b前缀?
解决Python读取二进制文件后输出带
b'...'的问题 你这段代码是从特定偏移量读取二进制数据,结果打印出的b'\x95\xdc\x00'是Python对bytes类型对象的默认表示——开头的b就是用来标识这是字节数据,不是字符串。要去掉这个b,核心是把bytes对象转换成字符串类型,这里给你两种实用的解决方法:
方法1:用decode()转换为字符串(推荐)
因为你读取的是非标准ASCII/UTF-8的字节,推荐用latin-1编码解码,它会把每个字节直接映射为对应的Unicode字符,不会出现解码报错:
cardPath = str(input("Enter card path: ")) print("Card name is: ", end="") with open(cardPath, "rb+") as f: f.seek(0x00000042) uName = f.read(3) # 用latin-1解码字节为字符串 print(uName.decode('latin-1'))
如果你的卡片数据有指定编码(比如UTF-16),可以替换成对应编码,比如uName.decode('utf-16-le')(小端字节序),根据实际情况调整即可。
方法2:直接格式化输出(仅视觉上移除标记)
如果只是想在打印时去掉b和引号,不需要实际转换为字符串,可以用repr()配合切片:
cardPath = str(input("Enter card path: ")) print("Card name is: ", end="") with open(cardPath, "rb+") as f: f.seek(0x00000042) uName = f.read(3) # 截取repr结果中去掉开头的b'和结尾的' print(repr(uName)[2:-1])
这种方法只是修改了输出的显示形式,uName本身还是bytes类型,适合只需要临时调整打印效果的场景。
内容的提问来源于stack exchange,提问作者Andy_519
相关产品推荐
相关产品推荐

