2013-08-02 34 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