1

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

我最近的尝试是:

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,我想知道为什么当里面的值是一个整数时它工作得很好,为什么当它是一个浮点数时它会崩溃,以及如何修复它。

4

2 回答 2

1

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

于 2013-08-02T19:15:24.543 回答
0

啊,我想通了。

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

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

于 2013-08-02T19:15:45.653 回答