标题有点误导。基本上,我在一个巨大的列表中有一大堆数字,有几种不同的格式。我传递了值和它所在的类型,并希望将它们解包并将它们转换为十六进制字符串。
我最近的尝试是:
realVal = '0x%08x' % struct.unpack( evalType, ( rawVal ) )
realVal 应该是一个十六进制数字,它是数字的真实值,稍后在我的代码中使用。evalType 是数字 rawVal 的代码字母类型,而 rawVal 是直接从二进制文件中提取的原始值。evalType 是通过查找字典来接收的。但是当值是浮点数时,它会中断,但是在前 100K 的情况下,我运行的值是整数,这很好。
所以我尝试先将值转换为整数:
realVal = '0x%08x' % int ( struct.unpack( evalType, ( rawVal ) ) )
但这不起作用,因为根据错误消息,显然 struct.unpack( evalType, ( rawVal ) ) 是一个错误。
另外,我发现从 float 转换为 hex 可以通过 float.hex() 完成,所以我添加了一个 if 语句并尝试:
realVal = struct.unpack( evalType, ( rawVal ) ).hex()
当我知道该值是浮点数时,它会中断并说 touples 没有 .hex() 函数。
所以现在我知道我正在使用一个 touple,我想知道为什么当里面的值是一个整数时它工作得很好,为什么当它是一个浮点数时它会崩溃,以及如何修复它。