python - 在 Python 中将 1 加到 16 字节的数字

标签 python python-3.x

我正在尝试改进的程序具有以下代码,可将 byterray 中的 16 字节数字加 1:

for k in range(15, -1, -1):
    payload[k] = (payload[k] + 1) & 0x0ff
    if payload[k]:
        break

因此,它向最后一个字节加 1,处理溢出,如果结果为假 (0x00),它继续并向它之前的字节加 1,否则它停止。

这对我来说似乎是一个拼凑,我正在努力想出更好的东西,如果不是为了性能或可靠性,那么至少是为了它的外观。

到目前为止,我得到了这个,它在我的测试中产生了相同的结果:

hi,lo = struct.unpack('>QQ', payload)
payload = struct.pack('>QQ', hi, lo + 1)

我知道我的代码最多运行 2^64 次后会失败,但我很确定代码不会为单个数字运行超过几百次,所以更多的机会比最后几个字节的变化要小。

关于我打算改进的任何建议,以及获得相同结果的其他/更好方法?当然,如果有一个简单的解决 2^64 限制的方法,我很乐意看到它!

谢谢。

最佳答案

您可以使用 int.from_bytes() methodbytearray 直接转换为整数, 并返回到带有 int.to_bytes()bytes 对象:

incremented = int.from_bytes(payload, 'big') + 1
try:
    payload = bytearray(incremented.to_bytes(len(payload), 'big'))
except OverflowError:
    # value won't fit into the payload, wrap round to 0
    payload = bytearray(len(payload))

我不确定当你达到上限时会发生什么;您可以恢复为 0 (bytearray(len(payload))),坚持使用旧的 (2 ** 128) - 1 值,或做其他事情。

关于python - 在 Python 中将 1 加到 16 字节的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50389707/

相关文章:

python - PyQt 中的服务器-客户端连接

python - 在python中调整图像大小算法

python - Flask 虚拟环境耗尽

python - beautifulsoup 找不到类

python - 使用 Python 和 OpenCV 进行视频处理

python - LimeTabularExplainer 类型错误 : unhashable type: 'slice'

python - 汉诺塔非递归: Is my code correct?

python - 正则表达式解析二进制文件?

python - 删除重复超过 3 次的值,除了 Pandas DataFrame 中的第一个

python - 顺序拟合随机森林sklearn