GMP (MPIR) - 初始化时保持前导零
GMP (MPIR) - keep leading zeros when init
我正在开发一个程序,我们在其中读取一串 1 和 0“0 0 0 0 1 1 0 0 0 ...”等作为输入。
对于程序的一部分,我们需要将这个字符串转换成vector/array位的位。方便的是,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);
我正在开发一个程序,我们在其中读取一串 1 和 0“0 0 0 0 1 1 0 0 0 ...”等作为输入。
对于程序的一部分,我们需要将这个字符串转换成vector/array位的位。方便的是,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);