LINUX.ORG.RU

Дружок, то, что ты написал сейчас (о первом твоём опусе я вообще молчу), это не CRC в её настоящем понимании, а простая чексумма по алгоритму Modular sum.

Иди учи матчасть. А примеров расчёта разных CRC на любых языках уйма в интернете.

anonymous
()
const char *str = "A9D7C00105H0D7";

...

sum = 0;

for (i = 0; str[i] != '\0'; i += 2) {
        unsigned char x, y;

        x = str[i];
        y = str[i + 1];

        if (y == '\0')
                return fuck();
        
        switch (x) { /* switch вынеси в отдельную функцию */
                case '0'...'9':
                        x = x - '0';
                        break;
                case 'A'...'F':
                        x = x - 'A' + 0xA;
                        break;
                case 'a'...'f':
                        x = x - 'a' + 0xA;
                        break;
                default:
                        return fuck();
        }

        switch (y) {
                case '0'...'9':
                        y = y - '0';
                        break;
                case 'A'...'F':
                        y = y - 'A' + 0xA;
                        break;
                case 'a'...'f':
                        y = y - 'a' + 0xA;
                        break;
                default:
                        return fuck();
        }

        sum += (x << 4) + y; /* тут должен быть твой алгоритм */
}       
      
return sum & 0xFF;
ttnl ★★★★★
()
Ответ на: комментарий от wolfy

1)Если не уверен и не знаешь, то лучше не говори.

2)Ты конечно же скомпилировал оба варианта и сравнил ассемблерные листинги?

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

А что произойдёт, если будет использоваться кодировка, в которой a…f стоят не по порядку или не друг за другом?

PolarFox ★★★★★
()
Ответ на: комментарий от ttnl

Хотя когда мы к ЕГЭ готовились, то писали именно так, ага :3

PolarFox ★★★★★
()
Ответ на: комментарий от ttnl

В том, что хватит двух переменных вместо трех я уверен. Конопелировать всякий бред - зачем надо?

Да и вообще, как по мне - так лучше написать помедленнее, зато посопровождаемее.

wolfy
()
Ответ на: комментарий от PolarFox

А что произойдёт, если будет использоваться кодировка, в которой a…f стоят не по порядку или не друг за другом?

Ничего хорошего не будет. Но в случае Си и ASCII-based кодировки(что я предположил, исходя из «побайтовости») так можно.

ttnl ★★★★★
()

> строки hex

> A9D7C00105H0D7

> H

а какие ещё «цифры» входят в «строку hex» на вашей планете?

arsi ★★★★★
()
Ответ на: комментарий от PolarFox

Он найдет создателя этой кодировке и вырежет ему печень :)

buddhist ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.