c-GMP(MPIR)-初始化时保持前导零

  • 本文关键字:初始化 MPIR c-GMP c gmp
  • 更新时间 :
  • 英文 :


我正在编写一个程序,在该程序中,我们读取一个由1和0组成的字符串"0 0 0 0 1 1 0 0 0…"等作为输入。

对于程序的一部分,我们需要将此字符串转换为位向量/位数组。方便的是,mpz_init_set_str在GMP库中提供了这一功能(程序的其余部分使用GMP来加快计算速度(。

然而,由于mpz_init_set_str丢弃前导零,第一组零被忽略,直到我们达到一个零:https://github.com/alisw/GMP/blob/master/mpz/set_str.c#L103

GMP库中是否有一个函数使mpz_init_set_str不会忽略前导零?

我意识到我可以修改GMP库来解决这个问题,但我认为这对用户来说会很痛苦。

while ((bytesRead = fread(buffer, 1, 8192, file)) > 0)
{
mpz_init_set_str(res, buffer, 2);
mpz_export(buff, &result, 1, 1, 0, 0, res);
for (size_t i = 0; i < result; i++) {
fputc(buff[i], fptr);
}
mpz_clear(res);
}

添加"fake"1,然后获得该位并转换回其旧值:

unsigned char newCh = (char)((int)buff[0] - 128);

最新更新