在python中正确地将二进制数据转换为十六进制



我正在编写一个程序,该程序使用BMP和一个单独的文件作为透明度层。我需要将它们转换成PNG,所以我使用PIL在python这样做。但是,我需要十六进制透明度文件中的数据,以便将其添加到图像中。我正在使用binascii。

现在,我遇到的问题是,由于某种原因,数据,通过十六进制函数(我已经系统地通过我的代码一块一块地缩小它),看起来不同于它在我的十六进制编辑器,并在图像中造成轻微的扭曲。我似乎不知道我哪里出错了。

十六进制编辑器中处理前的数据

十六进制编辑器处理后的数据

这是我的代码中有问题的部分:

filename = askopenfilename(parent=root)
with open(filename, 'rb') as f:
    content = f.read()
    f.close()
hexContent = binascii.hexlify(content).decode("utf-8")
我输入

我的输出(这是写入文件的十六进制内容。因为我知道它在编写文件时不会出错,而且它也与我的实际程序无关,所以我没有将该部分添加到代码片段中)

在别人问我之前,我试过编解码器。Encode (content, 'hex')和binascii.b2a_hex(content).

至于我是如何知道这部分是搞砸了,我打印出binascii.hexlify(内容),并发现相同的部分,在十六进制编辑器,它看起来完全相同,我得到了什么在最后。

另一个可能出错的地方是在"open(filename, 'rb')"步骤中。我还没有想到一个方法来验证这一点。因此,任何帮助或建议将不胜感激。如果您需要我用于测试目的的其中一个文件,我很乐意在这里添加一个。

如果我正确理解你的问题,那么你想要的输出应该在十六进制编辑器处理之前匹配数据。我可以用下面的代码获得它:

with open('Input.alp', 'rb') as f:
    i = 0
    for i, chunk in enumerate(iter(lambda: f.read(16), b'')):
        if 688 <= i * 16 <= 736:
            print i * 16, chunk.encode('hex')

输出:

688 ffffffffffffffffffffffffffffffff
704 ffffffffffffffffffffffe000000000
720 000000000000000001dfffffffffffff
736 ffffffffffffffffffffffffffffffff

相关内容

  • 没有找到相关文章

最新更新