1

我尝试了几种不同的方法,从

def ToByteArray(x):
    x = int(x)
    return x.to_bytes((x.bit_length() + 7) // 8, byteorder='big')

或将 x 乘以 256 并bytearray在循环中构建一个新的,但与普通 python int 或 gmpy2 c++ 的转换相比,它感觉很慢。

mpz_exportc++中没有类似的东西吗?最快的方法是什么?

编辑:我需要将其转换为的原因byteshashlib不能 hash mpz。如果有另一种快速的方法来获得强大的加密(sha256)哈希mpz,而不必将其转换为bytes第一个,那也可能会有所帮助!

4

1 回答 1

2

我想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'
于 2017-03-05T01:47:01.383 回答