@Pudjak

Как переводить из двоичного числа — строки в десятичное число строку?

Попытался реализовать вот отсюда алгоритм:
https://stackoverflow.com/questions/5246976/binary...
void binaryToString(char *binaryFull, char *decimalString) {
    int zeroCounter = 0;
    while (binaryFull[zeroCounter] == '0') {
        zeroCounter++;
    }
    while (binaryFull[0] != '\0') {
        int R = 0;
        char binaryStack[110] = "";
        for (int i = 0; i < strlen(binaryFull) - zeroCounter; i++) {
            R = 2*R + i;
            if (R >= 10) {
                binaryStack[i] = '1';
                R -= 10;
            } else {
                binaryStack[i] = '0';
            }
        }
        
        binaryStack[strlen(binaryFull) -  zeroCounter] = '\0';
        printf("%s\n", binaryStack);
        int j = 0;
        while (binaryStack[j] == '0') {
            j++;
        }
        for (int i = 0, k = j; i < strlen(binaryStack) - j; i++, k++) {
            binaryFull[i] = binaryStack[k];
        }
        binaryFull[strlen(binaryStack) - j] = '\0';
        
    }
}

Но не получается. R, как я понимаю, должна быть очередная десятичная цифра получающегося числа? Но вот не понимаю, что за "b in bits of X". b это длина строки, или что-то другое?
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Но не получается

Ну да, не получается, потому что ты не понял алгоритма по ссылке до конца, потому что его изложение оставляет желать лучшего.
- zeroCounter как я понял нужен для реализации шага "Remove leading "0" from X'", но эта реализация неправильная. К тому же она находится вне цикла while ( X != "0" ).
- for (b in bits of X) // msb to lsb говорит о том, что b должен пробегать двоичные цифры, от старшего разряда к младшему, в формуле R = 2*R + b фигурирует значение разряда, а не его индекс, как в твоём коде.

R, как я понимаю, должна быть очередная десятичная цифра получающегося числа?

Это верно. Очередной младший разряд.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы