2013-08-02 32 views
1

标题有点误导。基本上,我有一大堆数字在一个巨大的列表中有几种不同的格式。我传递了它的值和类型,并期望将它们解压缩并将它们转换为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()来完成,所以我在if语句添加和我尝试:

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

,当我知道的值是一个浮点数,它打破并且说touples没有.hex()函数。

所以,现在我知道我正在处理一个问题,我不知道为什么它的工作很好,当内部的值是一个整数,为什么它崩溃时,它是一个浮动,以及如何解决它。

+0

一些示例输入和示例输出将会很有用... –

回答

0

啊,我想通了。

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

,因为它是一个touple,和第一个索引是我的电话号码的存储位置。

+0

稍微灵活一些(如果你有多个你想在解压缩中使用的值 - 或者不支持.hex的项目,但是你想用十六进制表示它们):''{0:08x }”。格式(...)' –

1

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

+1

啊,是的,我只是想通了,谢谢。 – CamelopardalisRex