Этот код преобразует число, закодированное в строке ASCII, в значение байта.
Таким образом, учитывая строку 'A5', он будет хранить число 165 в байте в памяти.
Необходимо выполнить два чтения для каждого байтового значения.(Как вы можете видеть, в строке «A5» есть два символа: «A» и «5».
Процедура getc читает первый символ. В моем примере это «A»,который имеет значение ASCII 65 (41 шестнадцатеричный). Процедура вычитает 48, а затем снова 7. 65-48-7 = 10, что является десятичной записью шестнадцатеричной цифры A.
Цикл затемсдвигает это значение на 4 позиции, что приводит к значению 160 '. Это потому, что первый символ, который мы прочитали, был старшим байтом двухбайтовой строки.
В следующий раз, когда вызывается getc, он читаетсимвол '5', который имеет код 53. 53-48 равен 5.
Затем цикл добавляет 5 к ранее сохраненному значению 160, что дает правильное общее число 165.
Итак, этот фрагмент кода преобразует шестнадцатеричное число, закодированное в ascii, в значение байта. Вам нужно два символа, чтобы составить значение байта.