2014-01-20 48 views
0

我有一個128位值,我在python中存儲爲一個字符串。我想檢索它的最後4個字節,增加它,然後將它放回到128位值。例如:如何將字符串中的原始ascii值轉換爲整數?

mybigvalue = "69dda8455c7dd4254bf353b773304eec".decode('hex') 
lastInt = mybigvalue [12:] 
lastInt =lastInt +1 
mybigvalue [12:] = lastInt 

雖然這不起作用。我是一個python noob,不知道接下來要嘗試什麼,或者我的整個想法是錯誤的。我來自C背景,並不完全理解python如何處理數據。

+1

你使用Python 2或3嗎? –

+0

這是你的完整代碼嗎? 'ctr'定義在哪裏? 「這不行」是什麼意思?它崩潰了,還是什麼? – Kevin

+0

你是否將這些字節解釋爲小或大的字節序?簽名或未簽名? –

回答

5

的Python 2:使用struct.unpack()解釋這些最後4個字節爲一個整數:

import struct 

lastInt = struct.unpack('<I', mybigvalue[-4:])[0] 
lastInt += 1 
mybigvalue = mybigvalue[:-4] + struct.pack('<I', lastInt & ((1 << 32) - 1)) 

'<I'意味着字節被解釋爲無符號整數,小端。

我也屏蔽了值,以適應32位; ffffffff將以那種方式溢出至00000000

演示:

>>> import struct 
>>> mybigvalue = "69dda8455c7dd4254bf353b773304eec".decode('hex') 
>>> lastInt = struct.unpack('<I', mybigvalue[-4:])[0] 
>>> lastInt += 1 
>>> mybigvalue = mybigvalue[:-4] + struct.pack('<I', lastInt & ((1 << 32) - 1)) 
>>> print mybigvalue.encode('hex') 
69dda8455c7dd4254bf353b774304eec 

73304eec遞增到74304eec;如果你想改爲73304eed,請使用big-endian; '>I'

+0

美麗。非常感謝你解決了我的問題。 –

+0

雖然我懷疑我試圖用'C'風格的方式來解決python中的問題,並且它們可能是一種更好的蟒蛇式方法來處理這種形式的開始。 –

相關問題