将元组转换为未知类型的十六进制

时间:2013-08-02 19:09:58

标签: python

标题有点误导。基本上,我有一大堆数字在一个巨大的列表中,有几种不同的格式。我传递了它所在的值和类型,并期望将它们解压缩并将它们转换为HEX字符串。

我最近的尝试是:

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))是一个touple。

另外,我发现从float到hex的转换可以通过float.hex()完成,所以我添加了一个if语句,然后尝试:

realVal = struct.unpack( evalType, ( rawVal ) ).hex()

当我知道该值是浮点数时,它会断开并说操作没有.hex()函数。

所以现在我知道我正在使用一个touple,我想知道为什么当里面的值是一个整数以及为什么它在浮点数时崩溃以及如何修复它时它的工作正常。

2 个答案:

答案 0 :(得分:1)

通常struct.unpack(..)返回一个元组,即使它只返回一个以(x,)形式返回的元素。所以你应该尝试像这样设置一个零索引:struct.unpack(..)[0]。

答案 1 :(得分:0)

啊,我想通了。

realVal = struct.unpack( "<" + evalType, ( rawVal ) )[0].hex()

因为它是一个touple,第一个索引是我的号码存储的地方。