【问题标题】:How the following conditional statement works以下条件语句如何工作
【发布时间】:2021-12-28 06:32:55
【问题描述】:

谁能解释一下这段代码是如何工作的?我真的很感激

def inc_bytes(a):
    """ Returns a new byte array with the value increment by 1 """
    out = list(a)
    for i in reversed(range(len(out))):
        if out[i] == 0xff:
            out[i] = 0
        else:
            out[i] += 1 
            break
    return bytes(out)

【问题讨论】:

    标签: python list byte


    【解决方案1】:

    从字节数组的末尾开始(例如,b'\x01\x02\x03\xff'),它获取每个字节并检查它是否为 255 (0xff),在这种情况下,它将字节更改为 0 并继续前一个字节。如果遇到非 0xff 字节,则将其值从 1 增加并停止。

    inc_bytes(b'\x01\x02\x03\xff\xff')
    # b'\x01\x02\x04\x00\x00'
    

    在十进制中,这会将[1, 2, 3, 255, 255] 更改为[1, 2, 4, 0, 0],某种基于 255 的编号,受字节数限制(在所有 255 之后重置为全 0)。

    【讨论】:

    • 谢谢你,但你能告诉我它的目的是什么吗?
    • 没有上下文,没有。
    • 你知道,我在AES密码系统中使用这个脚本,在CTR模式下,我们需要一个字节类型的初始值,这个函数获取初始值作为输入,我们的IV是16字节。
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2021-09-10
    • 2011-04-20
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 2020-10-23
    相关资源
    最近更新 更多