在python中将字节转换为十六进制

在python中将字节转换为十六进制,python,Python,我正在尝试使用python将两个字节数据类型的数据相乘,方法是将它们转换为十六进制值。但是hex()函数似乎不起作用。你能帮我一下吗。下面是我的代码(x和y是字节类型的数据) 我得到一个错误:TypeError:'str'对象不能解释为整数 通过尝试 data = hex(x) * hex(y) 错误变为:TypeError:“bytes”对象不能解释为整数 有人能帮忙吗?hex(my\u var)返回一个字符串。要进行数学运算,需要将变量转换为int: x_int = int(x, base

我正在尝试使用python将两个字节数据类型的数据相乘,方法是将它们转换为十六进制值。但是hex()函数似乎不起作用。你能帮我一下吗。下面是我的代码(x和y是字节类型的数据)

我得到一个错误:TypeError:'str'对象不能解释为整数

通过尝试

data = hex(x) * hex(y)
错误变为:TypeError:“bytes”对象不能解释为整数

有人能帮忙吗?

hex(my\u var)
返回一个字符串。要进行数学运算,需要将变量转换为int:

x_int = int(x, base=16)
y_int = int(y, base=16)

decimal_value = x_int * y_int # integer
hex_value = hex(decimal_value) # string
data=hex(x)*hex(y)

这不起作用,因为
hex()
函数需要一个int作为参数并输出一个字符串

在Python3中,可以执行以下操作(将字节解释为基数10)


我在下面的评论中看到你的问题,你有你的x和y值的例子-如果你把bytes对象解释为任意长度的整数,你有一些非常大的数字需要处理。不确定这是否是您想要的,但这将进行字节与整数值之间的转换

>>> 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')
如果您想将它们解释为little endian,请将“big”替换为“little”

如果您的
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种方法中最快的

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

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

>>> hex_z = hex(int_z)

hex()?如果您尝试
data=hex(int(x))*hex(int(y))
?x=/\x12>\xb3\x96\xbd\x0c\xc8s\xad\x04\x08\xd7nJ\x8f\xa8\x06\x1d\xeb6s会发生什么情况@(\xbf\xee\x89y=44309230303964078525497418582166587006911137145697795614781250913657568315191209896495992412314727468771906128183182153256948374109895189205547919831470827136711515028626267256160841811987309370964978787858660678192569740694392457878787878781481480801810696011358382519851985178787128787878785178787878787878787878787814801890189016801696969698181818169696969515151515151515151787878787878517878787851787878787878517878787878787855978627468546960283049085759182207757975757952207108317018204086309222971046911427205962504111782964600981164650566114717307048577811637958868774956482801819432376638086821998480077279962434373789165332103718671806603152832476096421293453715460993156167445542686@GraceUwimana,如果您试图将这些长字节数组解释为任意长度h整数,请看一下我的答案,看看它是否是您所需要的。对于int(x,base=16),错误更改为ValueError:invalid literal for int()对于base 16,请使用
bytes.hex(x)将字节数组转换为十六进制字符串
然后将该值转换为int谢谢团队!我将字节加密为字符串,然后在乘法之前使用int,它的工作方式是t=bytes.hex(x),l=bytes.hex(y),m=int(l,16)*int(t,16)
>>> int_x = int.from_bytes(x, 'big')
>>> int_y = y
>>> int_z = int_x * int_y
>>> z     = int_z.to_bytes(bytes_length, 'big')
>>> hex_z = '0x' + ''.join(hex(b)[2:] for b in z)
>>> hex_z = hex(int_z)