liorko
liorko

Reputation: 1664

Convert mpz_t to binary representation

I'm using mpz_t for big numbers. I need to convert the mpz_t to binary representation. I tried to use the mpz_export, but the returned array contains only 0s.

mpz_t test;
mpz_init(test);
string myString = "173065661579367924163593258659639227443747684437943794002725938880375168921999825584315046";
    mpz_set_str(test,myString.c_str(),10);
    int size = mpz_sizeinbase(test,2);
    cout << "size is : "<< size<<endl;
    byte *rop = new byte[size];
    mpz_export(rop,NULL,1,sizeof(rop),1,0,test);

Upvotes: 2

Views: 2680

Answers (2)

Bill Cox
Bill Cox

Reputation: 61

You have a minor error in your code: sizeof(rop) is either 4 or 8, depending on whether a pointer is 4 or 8 bytes on your system. You meant to pass simply size, not sizeof(rop).

Here's some code that works for me, with g++ -lgmp -lgmpxx:

#include <stdio.h>
#include <iostream>
#include <gmpxx.h>

int main()
{
    mpz_class a("173065661579367924163593258659639227443747684437943794002725938880375168921999825584315046");
    int size = mpz_sizeinbase(a.get_mpz_t(), 256);
    std::cout << "size is : " << size << std::endl;
    unsigned char *rop = new unsigned char[size];
    mpz_export(rop, NULL, 1, 1, 1, 0, a.get_mpz_t());
    for (size_t i = 0; i < size; ++i) {
      printf("%02x", rop[i]);
    }
    std::cout << std::endl;
}

Upvotes: 1

xinaiz
xinaiz

Reputation: 7788

Using gmpxx (since it's taged as c++)

#include <iostream>
#include <gmpxx.h>

int main()
{
    mpz_class a("123456789");
    std::cout << a.get_str(2) << std::endl; //base 2 representation
}

There should be equivalent function in plain GMP

Upvotes: 3

Related Questions