如何用字符串中的1024位数字初始化gmp中的mpz_t?

时间:2011-07-13 18:31:32

标签: c gmp

我想在gmp中初始化一个mpz_t变量,其值非常大,如1024位大整数。我怎么能这样做?我是gmp的新手。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

使用mpz_import。例如:

uint8_t input[128];
mpz_t z;
mpz_init(z);

// Convert the 1024-bit number 'input' into an mpz_t, with the most significant byte
// first and using native endianness within each byte.
mpz_import(z, sizeof(input), 1, sizeof(input[0]), 0, 0, input);

答案 1 :(得分:2)

要从C ++中的字符串初始化GMP整数,可以使用libgmp++并直接使用构造函数:

#include <gmpxx.h>

const std::string my_number = "12345678901234567890";

mpz_class n(my_number); // done!

如果您仍需要原始mpz_t类型,请说n.get_mpz_t()

在C中,你必须拼写出来:

#include <gmp.h>

const char * const my_number = "12345678901234567890";
int err;

mpz_t n;
mpz_init(n);
err = mpz_set_str(n, my_number);    /* check that err == 0 ! */

/* ... */

mpz_clear(n);

有关初始化整数的更多方法,请参阅documentation