GMP (MPIR) - сохранять начальные нули при инициализации - PullRequest
0 голосов
/ 15 апреля 2020

Я работаю над программой, в которой мы читаем строку из нулей и единиц "0 0 0 0 1 1 0 0 0 ..." et c в качестве входных данных.

Для части Программа, нам нужно преобразовать эту строку в битовый вектор / массив битов. Удобно, что 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 Ответ

1 голос
/ 16 апреля 2020

Добавил "фальшивку" 1, затем получил этот бит и преобразовал обратно в старое значение:

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