Другие языки программирования и технологии

Как в Паскале написать прогу для перевода чисел из двоичной в шестьнадцатиричную.Длина кода 64 бит.(64 цифры в вводимом

Доброго времени суток.

Просто ее написать, просто.. . Главное, понимать, что делаешь и для чего. Одно из возможных решений может быть таким. Сработает аж для 255 разрядов входного числа.

program Bin2Hex;
uses Crt;
const arrHex : String = '0123456789ABCDEF'; {шестнадцатиричные цифры}
var
S, HexOut : String;
i, j, n : Integer;

begin
ClrScr;
ReadLn(S); {ввели двоичную строку}
i := 1; {степень двойки 2^0}
n := 0; {здесь накапливаем десятичный эквивалент тетрады}
for j:=Length(S) downto 1 do begin {просматриваем символы младшего разряда к старшему}
n := n + (Ord(S[j]) - Ord('0')) * i; {умножаем значение разряда на соответствующую степень двойки}
i := i shl 1; {следующая степень}
if i = 16 then begin {закончилась очередная тетрада}
HexOut := arrHex[n+1] + HexOut; {формируем выходную строку}
n := 0; {обнуляем накопитель}
i := 1; {и снова 2^0}
end;
end;
if n > 0 then HexOut := arrHex[n+1] + HexOut; {если была неполная тетрада}

WriteLn(HexOut); {покажем результат}
ReadLn; {и посмотрим на него}
end.

Удачи!
ИГ
Игорь Грунской
59 613
Лучший ответ
лучше читать по четыре цифры (главное чтобы в конце последняя из 4 пришлась на последнюю цифру кода)
пусть это b1,b2,b3,b4 (b1-старший бит)
тогда шестнадцатеричная цифра ((2*b1+b2)*2+b3)*2+b4

пример для 8-битного
01100101
первая четверка 0110 = ((0*2+1)*2+1)*2+0=6
первая четверка 0101 = ((0*2+1)*2+0)*2+1=5
если получится больше 9, помним, что 10=A, 11=B, 12=C, 13=D, 14=E, 15=F
Канат Жакупов
Канат Жакупов
22 753
сори вопросик не правильно прочитал, тогда сначала переводи в родную десятичную а потом в 16-ричную
Я конечно пишу на с++, на алгоритм такой:
1-делим число на 16(тоесть находим остаток от деления)
выглядит примерно так
ndelitel=chislo-получаем целый делительо (как-то у вас по-другому эта операция называется)
chislo=chislo-ndelitel*16;
далее пишем ifы
тоесть если ndelitel равен 1 в строку с числом пишем 1
если 2 пишем 2
если 10- пишем А
если 11-пишем B
и тд пока ndelitel не будет равен 0 тогда завершаем процедуру и выводим строку

Похожие вопросы