Если код внутри функции правильный, то функция названа неправильно.Это выглядит любительским, но вполне возможно, что оно предназначено для чтения последовательности цифр ASCII (независимо от того, каков набор символов выполнения реализации C) и записи десятичного двоичного кода .
Например, эта процедура может служить для чтения текста в ASCII и подготовки его для использования в финансовом программном обеспечении, которое использует двоично-десятичный код.(Системы, в которых не используется ASCII, в наши дни встречаются редко, а системы или приложения, использующие двоично-десятичную дробь, встречаются редко, но тот факт, что в коде присутствуют признаки того и другого, является некоторым свидетельством намерения, а не аварии.)
Имея это в виду, мы можем интерпретировать код:
for(i=0; i<iLen; i++)
Это повторяется один раз для каждой пары выходных цифр.Таким образом, количество обработанных цифр равно 2*iLen
, а количество записанных байтов равно iLen
.
pchOut[i] = (((unsigned char) *pchIn)-0x30)*16;
Это берет один символ из ввода и вычитает код ASCII для «0».Поскольку цифры ASCII от «0» до «9» имеют последовательные коды, результатом является число, представленное цифрой от 0 до 9. Затем это число умножается на 16, фактически на левое смещение, и сохраняется в текущем выходном байте.
pchOut[i] += (((unsigned char) *pchIn)-0x30);
Это вычисляет число, представленное следующим входным символом, и добавляет его к текущему выходному байту.В результате две цифры упакованы в один байт, каждый из которых закодирован в четыре бита.Например, десятичная цифра «74» на входе будет закодирована как 74 16 (0x74
), что составляет 116 10 .