Python读取.bin数据并转换为字符串

问题描述 投票:0回答:1

我有多个bin文件,我想从它们中提取数据,但是我得到的结果很奇怪。

例如,我的第一个文件执行以下操作:

path = 'D:\lut.bin'
with open(path, 'rb') as file: # b is important -> binary
    fileContent = file.read()
    print(fileContent)

输出:

xc7\xfb\x99\x0c\x8e\xf9~7\xb9a\xb1*\x06\xd2o\xb8\xb2 \x81\x8bg\xd2\xc6bE\r\xb9KL7\xa0\xa52\xa5\xd2\x17\x86(\xe9\x02\xbf\xeb\x8fDvk\xe7\x8d\x03\x872\x9fop\xbck\xe1\x94\x02\xdc\xef\x85I\t\xc8\x8d\xdfl\x90\xcf*\xb1\x02(\x16~)\xc7\xa2\x1f\xf6o\xdc\x1en\x84H\xf6%\xfaW/\xee\xbc\xdd^/\x9b\x9a\xe5\x99\xa2\xd7\xe4\x93U\xd4\xef$\xa5\x8aW\xf6\xc9\xb0T\xe3<\x147\xcc\x08}\xc8\x15J3v\n\x9d\x16\xa3\x8d\r\xa2\xc4\x15\xf13!\xa2\x01\x14\xef\xaf\x06\x83p\xa7Ot\x8cr\xdf\xef\xbe\x93\xc2D`y\\\xdb\x8a\x1c\\H\x9cE\xabF\xd6\xe1B\xdd\xbc\x8a\xdb\x06|\x05{!\xf0K25K0\xb9\xfe\xa6n\xd7-\xd1\xcb\xefQ\xd9w\x08{4\x13\xba8\x06\x00}S\xe4\xd8*\xe2\x81f\x8d\xc4P\xde\x88/\xa6q\x7fG\x99\xbd\xa84v\xcfS+\xc6\xc5#\x0ey\xd8\xcd\xf2!\xf8`1\x03k5\xb9\xee\xb3V\xc3">\xdd\xf4\x94\x1b\x83\xf9\xdbe\xfcw\xf4+O\xf4\xf1\xfc\xa2 \xc5\xccq\xd1\xc8dH\x00\xf7K|7\x87\xa8$\xb8\x92^\x90.\xffK\xbf\xf6\xcaHv9l\xa6\x0e\xd5"\xd6`>}f\xfc\xd1\x15\xd0\xf0\x89\xb7\x12\xdf\xc9\xdfn\x97\xc7O\xf8\x05)Ua|\xd6\xd5\x03P\xf3\xcd\x08 \xc6\xc7\xe2"\xae\x1fz\xb9\xbd\x99\x100\x9a\x8d\xeb\x89\xa3T\xa0\xc7S\xcc\xe4h\xbe\xf3R\xe9\x9d\xf4Y\xe91\xa4%\x85>mn\xc3\x1e\x8a}\x04\xd9:\xb5\xde\x01h\x90y\xfe4&\xea\x1d\x9a\xbd\xac\x1a\x8e{\xb2Y\xcb\xc47\xd8\xe2\xf6\xd6\xdc\x91,]\x1d\xca\x90_sb\x86X\xad]\x8e\xe1A\x1a\xaa\xc6\xdf\x1ca@A\x1a\xa2\t!3\x06y\x92\x96\xebg\xdb3\xdd\x9f\xefh\x9d6\x17c0\x0e\xfe\x9a\x06\x06;\x16\xa7\x

我不知道这是什么,但是它看起来不像可读的文本,有没有办法转换它?我的其他文件如下所示:

U\xff\xf3\xe8d\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03H\x00\x00\x00\x00LAME3.100UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU

再次使用与上面相同的代码。

我尝试对其进行解码,但不断出现解码错误,并且将文本编码为utf-8也无济于事。

我想从中获得文本,这些文件与我下载的Playstore上的书一起提供。

python encoding binary byte decoding
1个回答
0
投票

Bin文件只是二进制数据,这意味着每个字节可以是0到255之间的任何值(0000000011111111,十六进制0x00-0xFF)。

可打印字符是这些代码的子集。

这意味着,并非每个bin文件都可以转换为文本。


Python试图通过将那些可打印的字符替换为它们的\xNN代码(其中N是十六进制数字)来使字节流可视化。其余字符将作为其代码打印。

这意味着

U\xff\xf3\xe8d\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03H\x00\x00\x00\x00LAME3.100UU

实际上是

\x55\xff\xf3\xe8\x64\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03\x48\x00\x00\x00\x00\x4c\x41\x4d\x45\x33\x2e\x31\x30\x30\x55\x55

[[以字符串形式(即用引号将其复制到您的Python解释器中,并查看它在显示/打印时如何在视觉上进行自我转换!]

零件:

  • 已解码U
  • 然后未解码\xff\xf3\xe8
  • 已解码d
  • 未解码\x00\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x00\x03
  • 已解码H
  • 未解码\x00\x00\x00\x00
  • 已解码LAME3.100UU

您可以从中提取一些数据吗?根据垃圾箱的类型,您可能会发现直接在其中放置some字符串-像看起来像某些代码/版本的LAME3.10一样...但是我真的怀疑您会发现有用的东西。它实际上可以是任何东西,只需将其转储到那里即可:文本,照片,内存转储...

© www.soinside.com 2019 - 2024. All rights reserved.