Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to initialize a mpz_t in gmp with a 1024-bit number from a character string?

Tags:

c

gmp

I want to initialize a mpz_t variable in gmp with a very large value like a 1024 bit large integer. How can I do so ? I am new to gmp. Any help would be appreciated.

like image 571
XyZ Avatar asked Jul 13 '11 18:07

XyZ


2 Answers

Use mpz_import. For example:

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);
like image 72
Adam Rosenfield Avatar answered Nov 15 '22 14:11

Adam Rosenfield


To initialize a GMP integer from a string in C++, you can use libgmp++ and directly use a constructor:

#include <gmpxx.h>

const std::string my_number = "12345678901234567890";

mpz_class n(my_number); // done!

If you still need the raw mpz_t type, say n.get_mpz_t().

In C, you have to spell it out like this:

#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);

See the documentation for further ways to initialize integers.

like image 3
Kerrek SB Avatar answered Nov 15 '22 13:11

Kerrek SB