如何为mpz_class对象分配二进制值

时间:2013-04-16 08:42:45

标签: c++ gmp

我想为mpz_class对象分配二进制值

我的二进制数为10011101111001111100010111000011111010010。

我想将它分配给值对象,即(mpz_class value)

感谢

2 个答案:

答案 0 :(得分:0)

这是一种方式,是否是你需要我不能说的,因为你还没有很好地描述你的问题

mpz_class value("1356396726226", 10);

这是另一种方式

mpz_class value("10011101111001111100010111000011111010010", 2);

这两个示例都使用带有字符串的mpz_class构造函数。也许这就是你要找的东西。

答案 1 :(得分:0)

我写这篇文章是希望找到解决方案的人有更好的选择来实现所描述的功能。

GMP提供了将mpz结构导出和导入二进制文件的功能,它们是:

mpz_import(mpz_t rop, size_t count, int order, size_t size, int endian, size_t nails, const void *op)
mpz_export(void *rop, size_t *countp, int order, size_t size, int endian, size_t nails, const mpz_t op)

Integer Import and Export更好地描述了它们。 通常使用mpz_export命令导出mpz_t结构,它将以W | W | W | W | W的格式输出二进制数组,其中W是您指定为Word的二进制字节组。 order param用Word指定二进制的endianess,endian param指定W内的endianess(二进制字节组)。

所以在上面的例子中,如果我们在

中有一个数字的二进制表示
const char num[100];
// assuming some initialization of num from may be inbound network packet?

我们可以使用二进制文件

创建mpz_t
mpz_t res; mpz_init(res);
mpz_import(res, 100, -1, 1, -1, 0, num);

假设我们拥有的字节是小端,Word的大小为1字节。