【问题标题】:GMP (MPIR) - keep leading zeros when initGMP (MPIR) - 初始化时保持前导零
【发布时间】:2020-07-28 19:06:33
【问题描述】:

我正在开发一个程序,我们在其中读取一串一和零“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);
        }

【问题讨论】:

  • 你能在第一个位置添加一个假的 1 吗?我真的不明白你希望用这个号码做什么。
  • 我读取了只包含 0 和 1 的大文件,然后我想将它们转换为 ASCII。但是由于任务的要求,保持前导零至关重要
  • @MarcGlisse 嗯...我刚试过这个,但这意味着我应该能够在 GMP 导出后扭转它。尝试过这样的事情:将前导零字符设置为'1'然后进行mpz init然后导出,毕竟得到第一个字符的int值(我改变了) - 128然后转换回无符号字符

标签: c gmp


【解决方案1】:

添加“假”1,然后获取该位并转换回其旧值:

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

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多