首页 > 解决方案 > 在python中将字节转换为十六进制

问题描述

我试图通过尝试将它们转换为十六进制值来使用 python 将字节数据类型的两个数据相乘。但似乎 hex() 函数不起作用。你能帮我解决这个问题吗?下面是我的代码(x 和 y 是我们的字节类型数据)

data=bytes.hex(x) * bytes.hex(y)

我收到错误:TypeError:'str' 对象不能被解释为整数

通过尝试

data = hex(x) * hex(y)

错误变成:TypeError:'bytes'对象不能被解释为整数

有人可以帮忙吗?

标签: python

解决方案


我在您的问题下方的评论中看到您有 x 和 y 值的示例 -如果您将字节对象解释为任意长度的整数,您将需要处理一些非常大的数字。不确定这是您想要的,但这会将字节转换为整数值/从整数值转换。

>>> int_x = int.from_bytes(x, 'big')              # From bytes to int.
>>> int_y = int.from_bytes(y, 'big')
>>> int_z = int_x * int_y                         # int_z as an integer.
>>>
>>> # Converting int_z to a bytes object:
>>>
>>> bytes_length = (int_z.bit_length() + 7) // 8
>>>
>>> z = int_z.to_bytes(bytes_length, 'big')

如果您希望它们被解释为小端,请将“大”替换为“小”。

如果您的y值已经是 int 类型,它在您的评论中看起来像,那么在相乘之前不要转换它:

>>> int_x = int.from_bytes(x, 'big')
>>> int_y = y
>>> int_z = int_x * int_y
>>> z     = int_z.to_bytes(bytes_length, 'big')

第一个参数是要创建int.to_bytes()的对象的长度。bytes还有其他方法可以计算此值,但我所包含的方法是我计时的 3 种方法中最快的方法。

如果您只想将bytes对象转换为其十六进制字符串表示形式(z以下被视为bytes对象):

>>> hex_z = '0x' + ''.join(hex(b)[2:] for b in z)

或将 an 转换int为十六进制字符串:

>>> hex_z = hex(int_z)

hex()可以处理非常大的整数。


推荐阅读