Почему мое двоичное число не преобразуется должным образом в шестнадцатеричное? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь преобразовать двоичное число в шестнадцатеричное число, сначала преобразовав двоичное число в десятичное, а затем в шестнадцатеричное.

Когда я запускаю часть, которая преобразует только десятичную в шестнадцатеричную, она работает нормально, но всякий раз, когда я пытаюсь запустить обе, она не работает?


for (returnBinary = length - 1; returnBinary > -1; returnBinary--) {

     if (input[returnBinary] == '1') {
        binDec = binDec + power(2, length - returnBinary - 1);
     }

}

// decimal to hex

while (binDec != 0) {

      remainder = binDec % 16;

       if (remainder < 10) {

         hexResult[returnBinary++] = 48 + remainder;

        } else {

         hexResult[returnBinary++] = 55 + remainder;

        }

        binDec = binDec / 16;

}

// print in reverse

printf("Your hexadecimal value is: 0x");

for (returnHex2 = returnHex; returnHex2 >= 0; returnHex2--) {
        printf("%c", hexResult[returnHex2 - 1]);
}

Каждая часть отлично работает отдельно, но вместе она не работает.

EG: Преобразование десятичного числа 60 в шестнадцатеричное работает нормально, но при преобразовании двоичного эквивалента 60 (111100) это дает мне результат 0xC, когда он должен быть 0x3C.

1 Ответ

1 голос
/ 10 апреля 2019

Прослеживая это, я вижу, что:

hex[-1] = 'C'
hex[0] = '3'

Я подозреваю, что вы имели в виду

hexResult[returnHex++] = 48 + remainder

вместо

hexResult[returnBinary++] = 48 + remainder

, предполагая, что returnHex инициализированв ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...