我尝试了几种不同的方法,来自
def ToByteArray(x):
x = int(x)
return x.to_bytes((x.bit_length() + 7) // 8, byteorder='big')
或将x跳过256并在循环中构建一个新的bytearray
,但与普通python int或gmpy2 c ++的转换相比,它感觉很慢。
在c ++中是不是有类似mpz_export
的东西?实现这一目标的最快方法是什么?
修改:我需要将其转换为bytes
的原因是hashlib
无法哈希mpz
。如果还有另一种快速方法可以获得mpz
的强加密(sha256)哈希值,而不必先将其转换为bytes
,那么这也有帮助!
答案 0 :(得分:1)
我认为gmpy2.to_binary()
会做你需要的。它将gmpy2
对象转换为可移植字节序列。它使用mpz_export
将基础mpz_t
转换为字节序列。包含gmpy2
类型和长度的短标头位于字节序列的开头。对于gmpy2.mpz
类型(假设值不为0),标头长度为两个字节。
>>> gmpy2.to_binary(gmpy2.mpz(123456**7))
b'\x01\x01\x00\x00\x00\x00\x00\xe4\x9f\xcc\xfb\xad\xe5\x1f\xec.T'