解析十六进制文件并逐字节解码
Posted
技术标签:
【中文标题】解析十六进制文件并逐字节解码【英文标题】:parse hex file and decode byte by byte 【发布时间】:2021-10-03 21:30:16 【问题描述】:我有一个扩展名为 .brt 的十六进制文件,其十六进制值在 00 - FF 范围内。 我想在命令提示符下解析文件并逐字节打印。
我尝试了以下代码行:
file = open("file.brt", encoding='utf-8')
data = file.read()
这给了我错误:
Exception has occurred: UnicodeDecodeError
'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
我了解错误是因为该值超过 128。然后我尝试使用 utf-16,这给出了一些随机值。 然后我尝试了以下代码行:
file = open("file.brt", encoding='ANSI')
data = file.read()
for line in data:
for char in line:
print(char.encode('utf-8').hex())
上面的代码正在解析数据,但如果十六进制值大于128
,则打印一些随机值。例如,如果十六进制值为FF
,则打印c3bf
【问题讨论】:
encoding='utf-8
表示您期望文件中有 字符(UTF-8 编码)。这合适吗? .brt 文件的来源是什么?它可能是二进制格式,所以你应该open
以二进制模式('b'),见docs。
什么叫十六进制文件?您可以使用文本编辑器(notepad、notepad++、vi 等)打开它并查看十六进制代码,还是必须使用二进制编辑器打开它才能查看 原始字节的十六进制代码?
【参考方案1】:
您可以尝试以二进制模式打开文件,方法是将打开行更改为 open('file', 'b')。然后你可以用十六进制值处理你的文件。
【讨论】:
以上是关于解析十六进制文件并逐字节解码的主要内容,如果未能解决你的问题,请参考以下文章