python - 在python中将字节转换为十六进制
问题描述
我试图通过尝试将它们转换为十六进制值来使用 python 将字节数据类型的两个数据相乘。但似乎 hex() 函数不起作用。你能帮我解决这个问题吗?下面是我的代码(x 和 y 是我们的字节类型数据)
data=bytes.hex(x) * bytes.hex(y)
我收到错误:TypeError:'str' 对象不能被解释为整数
通过尝试
data = hex(x) * hex(y)
错误变成:TypeError:'bytes'对象不能被解释为整数
有人可以帮忙吗?
解决方案
我在您的问题下方的评论中看到您有 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()
可以处理非常大的整数。
推荐阅读
- javascript - 打字稿:扩展div元素的属性在react ref上失败
- python - Firebase 更新文档字段,而预期不会这样做(使用事务)
- c# - 在 WPF .NET Core 应用程序的不同项目中访问 appsettings.json 值
- rxjs - 当一个 observable 发出一个值时,需要执行 2 次 API 调用
- r - 更改闪亮仪表板框的宽度
- c# - 在 Azure 函数中读取包含 pdf 的请求正文时出错
- django - 在特定视图中使用自定义中间件获取类型错误
- c# - Visual Studio 返回荷兰语异常而不是英语
- angular - Angular.io 将选择器替换为表格
- spring-boot - 如何在 Springboot 的依赖模块中引导缓存?