我有以下代码片段:
def digest(self):
mdi = self._counter & 0x3F
length = struct.pack('!Q', self._counter<<3)
if mdi < 56:
padlen = 55-mdi
else:
padlen = 119-mdi
r = self.copy()
r.update('x80'+('x00'*padlen)+length)
return ''.join([struct.pack('!L', i) for i in r._h[:self._output_size]])
我正在一个不使用CPython
的项目上工作,因此我需要用本机实现替换struct
库。如何在Python中实现struct.pack
方法?
您可以使用int.to_bytes
。! 对应大端序,而Q对应长度为8字节且无符号(signed=False)。因此,您可以写
length = (self._counter<<3).to_bytes(8, 'big', signed=False)