Рассматривать каждый символ как целочисленное значение. Поскольку старший бит каждого символа равен , предполагается, что равен нулю (поскольку в спецификации не сказано, что вам нужно его проверять), замаскируйте его значение чем-то вроде этого (псевдо-C / C ++ / Java / что угодно) :
get_next_character() & 0x7f;
Теперь вы просто добавляете (псевдо-C / C ++ / Java / что угодно):
int s = 0;
while(!end_of_string())
{
s += get_next_character() & 0x7f;
s &= 0xff;
}
Это последовательно добавит каждый символ ASCII и удалит все, что за 8-м битом, из полученной суммы. Когда вы все закончите (C или плохо написанный C ++):
printf("Checksum: %02x\n", s); /* You may need %02X for uppercase.
I don't remember my printf codes anymore. */
В качестве оптимизации (если она вам действительно нужна - вряд ли в этом случае!) Вы можете отложить бит s &= 0xff
и вместо этого использовать усечение в точке использования контрольной суммы. Однако это не сильно сэкономит на производительности - ваш ввод-вывод будет намного дороже - и вы можете забыть сделать это позже, когда вы будете реорганизовывать свой код.