GMP 进口/出口

问题描述 投票:0回答:2

我的

import/export
GMP 功能有问题。 我尝试转换负数和正大整数,但是当我使用负数时,我会丢失符号。 有相关例子吗?

出口:

int mydim = (mpz_sizeinbase(c, 2) +7)/ 8;
myb = (char*) malloc(sizeof(char) * mydim);
count = (size_t*) malloc(sizeof(size_t));

if (mpz_sgn(c)>=0) {
  mpz_export((void *) myb, count, 1, sizeof(char), 1, 0, c);
} else {
  mpz_add_ui(c,c,1);
  mpz_export((void*)myb, count, 1, sizeof(char), 1, 0, c);
  for (int i =0;i<=mydim;i++) { //This could be done more effectively
    myb[i]=~myb[i];
  }
}

进口:

mpz_import(s, *count, 1, sizeof(myb[0]), 1, 0, myb);
int sign = myb[0] < 0?-1:1;
if (sign == -1)
  mpz_neg(s,s);
import export digital-signature biginteger gmp
2个回答
1
投票

mpz_export 文档说:

忽略 op 的符号,仅使用绝对值。


0
投票

计算myb的补码,不要忘记负数的符号位。

© www.soinside.com 2019 - 2024. All rights reserved.