这段python索引代码做了什么

时间:2014-01-02 12:10:58

标签: python indexing

请解释一下这段代码是做什么的。

h应该是sha256计算的32Byte结果。

我正在用C ++为我的项目重写此代码的部分内容,我不确定这是否会切换每4字节块的字节顺序或更改整个32字节数的字节顺序。

def reverse_hash(h):
    return struct.pack('>IIIIIIII', *struct.unpack('>IIIIIIII', h)[::-1])[::-1]

而且,这个数组索引如何工作?

   [::-1]

感谢您提供任何和所有信息

2 个答案:

答案 0 :(得分:3)

[:: - 1]创建一个具有相反元素顺序的新列表

答案 1 :(得分:0)

[::-1]列表中元素的逆序,所以这个脚本改变了每个4字节子序列的顺序(为了改变endiannes,我想):

>>> h = ''.join(map(str, range(0,21)))
>>> h
'01234567891011121314151617181920'
>>> struct.pack('>IIIIIIII', *struct.unpack('>IIIIIIII', h)[::-1])[::-1]
'32107654019821114131615181710291'

等价表达式:

>>> struct.pack('<IIIIIIII', *struct.unpack('>IIIIIIII', h))
'32107654019821114131615181710291'