【发布时间】:2014-06-03 13:35:03
【问题描述】:
我需要将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中分配临时缓冲区。该手册包含调整输出缓冲区大小的正确算法。 -
我删除了动态分配的大小。我不确定我是否理解你。你认为问题出在出口还是进口?