如何将字符串中的原始ascii值转换为整数?

时间:2014-01-20 20:55:07

标签: python

我有一个128位的值,我在python中存储为字符串。我想检索它的最后4个字节,递增它,然后将其重新放回128位值。例如:

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

但这不起作用。我是一个蟒蛇菜鸟,不知道下一步该尝试什么,或者我这样做的全部想法都是错误的。我来自C背景,并不完全理解python如何处理数据。

1 个答案:

答案 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'表示字节被解释为无符号整数,little-endian。

我还屏蔽了值以适应32位; ffffffff会以00000000的方式溢出。{/ p>

演示:

>>> 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'