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

在python中正确地将二进制数据转换为十六进制,python,python-2.7,binascii,Python,Python 2.7,Binascii,我正在开发一个程序,它使用BMP和一个单独的文件作为透明层。我需要将它们转换成PNG,所以我在python中使用PIL来实现。但是,我需要十六进制的透明度文件中的数据,以便可以将其添加到图像中。我正在使用binascii.hexlify函数来实现这一点 现在,我遇到的问题是,由于某种原因,数据在经过hexlify函数后(我通过逐段查看代码,系统地缩小了范围),看起来与在hex编辑器中不同,并且会在图像中造成轻微失真。我似乎不知道我错在哪里 以下是我的代码中有问题的部分: filename =

我正在开发一个程序,它使用BMP和一个单独的文件作为透明层。我需要将它们转换成PNG,所以我在python中使用PIL来实现。但是,我需要十六进制的透明度文件中的数据,以便可以将其添加到图像中。我正在使用binascii.hexlify函数来实现这一点

现在,我遇到的问题是,由于某种原因,数据在经过hexlify函数后(我通过逐段查看代码,系统地缩小了范围),看起来与在hex编辑器中不同,并且会在图像中造成轻微失真。我似乎不知道我错在哪里

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

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

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

在有人问我之前,我试过codecs.encode(content,'hex')和binascii.b2a_hex(content)

至于我如何知道是这个部分搞乱了,我打印了binascii.hexlify(内容),找到了与hex编辑器中相同的部分,它看起来与我最后得到的完全相同


出现错误的另一种可能性是在“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