我有一个128位的值,我在python中存储为一个字符串.我想检索它的最后4个字节,递增它,然后将其重新放回128位值.例:
mybigvalue = "69dda8455c7dd4254bf353b773304eec".decode('hex')
lastInt = mybigvalue [12:]
lastInt =lastInt +1
mybigvalue [12:] = lastInt
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我是一个蟒蛇菜鸟,不知道下一步该尝试什么,或者我这样做的全部想法都是错误的.我来自C背景,并不完全了解python如何处理数据.
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))
Run Code Online (Sandbox Code Playgroud)
'<I' 表示字节被解释为无符号整数,little-endian.
我还掩盖了值以适应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
Run Code Online (Sandbox Code Playgroud)
该73304eec递增到74304eec; 如果你想要73304eed,请使用big-endian; '>I'.
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |