解析十六进制文件并逐字节解码

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')。然后你可以用十六进制值处理你的文件。

【讨论】:

以上是关于解析十六进制文件并逐字节解码的主要内容,如果未能解决你的问题,请参考以下文章

java 按字节读写二进制文件(Base64编码解码)

在页面js 中,怎么将中文字符串转换成2个字节长度16进制数;并在js 环境下解码16进

IEEE754——4字节实数与十六进制的转换

4字节单精度二进制浮点数的解码

java实现解析二进制文件

Javascript 中的 Midi/二进制文件解码