Мне нужно преобразовать типы mpz_class
в vector<byte>
и наоборот.
Я реализовал эти две функции, но двустороннее преобразование не работает.
typedef unsigned char byte;
std::vector<byte> mpz_to_vector(std::shared_ptr<mpz_class> x) {
size_t size;
byte *a = (byte *) mpz_export(NULL, &size, 1, 1, 1, 0,x->get_mpz_t());
std::vector<byte> p(a,a+size);
free(a);
return p;
}
std::shared_ptr<mpz_class>vector_to_mpz(std::vector<byte> d) {
mpz_class ptr;
mpz_import(ptr.get_mpz_t(), d.size(), 1, sizeof(mpz_t), 1, 0, (void *) d.data());
auto tmp = std::shared_ptr<mpz_class>(new mpz_class(ptr));
return tmp;
}
size
является указателем на динамически выделенноеsize_t
? Также нет необходимости выделять временный буфер вmpz_export
. Руководство содержит правильный алгоритм для определения размера выходного буфера. - person Deduplicator   schedule 03.06.2014