在Python中将整数转换为十六进制字符串

4
file_1 = (r'res\test.png')

with open(file_1, 'rb') as file_1_:
    file_1_read = file_1_.read()    
file_1_hex = binascii.hexlify(file_1_read)
print ('Hexlifying test.png..')

file_1_size_bytes = len(file_1_read)
file_1_size_bytes_hex = binascii.hexlify(file_1_size_bytes)

print (file_1_size_bytes_hex)

TypeError: 'int' does not support the buffer interface

好的,我在这里尝试将.png文件的字节长度转换成十六进制。我知道这是因为file_1_read的len()返回的是一个数字,我想把它转换成十六进制。请问该如何操作?


也许我漏掉了什么,但是hex呢?整数进去,十六进制表示出来。内置且易于使用。 - Dave J
1个回答

6

你可以使用str.formatx类型

>>> '{:x}'.format(123)
'7b'
>>> '{:08x}'.format(123)
'0000007b'

或者使用 printf 样式格式化
>>> '%x' % 123
'7b'
>>> '%08x' % 123
'0000007b'

如果你想使用 binascii.hexlify,需要使用 struct.packint 对象转换为 bytes

>>> import struct
>>> import binascii
>>> struct.pack('i', 123)  # Replace 123 with `file_1_size_bytes`
b'{\x00\x00\x00'
>>> binascii.hexlify(struct.pack('i', 123))
b'7b000000'

您可以使用><等格式说明符来控制字节顺序:
>>> binascii.hexlify(struct.pack('>i', 123))
b'0000007b'
>>> binascii.hexlify(struct.pack('<i', 123))
b'7b000000'

请查看 Python中的格式字符 - struct模块文档


谢谢,非常有帮助的信息。 - Death_Dealer
struct.pack('i', file_1_size_bytes) binascii.hexlify(struct.pack_into('>i', file_1_size_bytes)) print(file_1_size_bytes_hex)我正在尝试打包变量,但我得到了pack_into期望偏移参数的错误。这个偏移是什么? - Death_Dealer
抱歉,我写错了。我包含了赋值语句,但是我得到了相同的struct.error pack_into预期偏移参数。 - Death_Dealer
太棒了,谢谢您的指导,我已经陷在这里有一段时间了。 - Death_Dealer
1
@Death_Dealer,解包它,然后打包它:struct.pack('>H', *struct.unpack('>I', b'\x00\x00\x00\x11'))。换句话说,将其转换为“int”,然后重新打包。 - falsetru
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接