请解释一下这段代码是做什么的。
h应该是sha256计算的32Byte结果。
我正在用C ++为我的项目重写此代码的部分内容,我不确定这是否会切换每4字节块的字节顺序或更改整个32字节数的字节顺序。
def reverse_hash(h):
return struct.pack('>IIIIIIII', *struct.unpack('>IIIIIIII', h)[::-1])[::-1]
而且,这个数组索引如何工作?
[::-1]
感谢您提供任何和所有信息
答案 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'