我使用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);
答案 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;
}