将mpz_t转换为二进制表示

时间:2016-07-24 11:23:34

标签: c++ gmp

我使用mpz_t作为大数字。我需要将mpz_t转换为二进制表示。我尝试使用mpz_export,但返回的数组只包含0。

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

2 个答案:

答案 0 :(得分:2)

使用gmpxx(因为它被评为Console.WriteLine(GetType(b));

c++

普通GMP应该有相同的功能

答案 1 :(得分:0)

您的代码中有一个小错误:sizeof(rop)为4或8,具体取决于系统上的指针是4字节还是8字节。您只想传递size而不是sizeof(rop)。

以下是一些适用于我的代码,使用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;
}
相关问题