Кресты / Говнокод #4542 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
BYTE* ptr = PreventCommand(mode,3);
WORD chksum=this->calc_chksum((BYTE*)(ptr+2));
ptr[4] = (char)(chksum/256 & 0xff);
ptr[5] = (char)(chksum%256 & 0xff);
_interface_array[0]->write(ptr,6, NULL);
delete [] ptr;

Формирование пакета
На третью и четвертую строки смотреть особенно больно.

Запостил: seregakabancheg seregakabancheg, (Updated )

Комментарии (8) RSS

  • Может быть так написано для универсальности?
    чтоб было пофигу little_endian или big_endian

    но после деления или взятия остатка от деления "& 0xFF" забавляет.
    Ответить
    • Этот говнокод я нашел, ковыряясь в исходниках своей старой, еще студенческой работы. О little endian и big endian я тогда вряд ли думал
      Ответить
  • А что, строки как строки. Только не 0xff, а 255 должно быть, чтоб программисты десятичную систему не забывали.

    Сначала подумал, что проще будет прямо в память положить chksum, но потом подумал, что хрен его знает, может, littleendian-а опасаются.
    Ответить
  • byteswap конечно подозрительный, но мне другое странно:
    сумма берется от блока смещению 2 и записывается в тот же блок по смещению 4 тем самым её испортив
    Ответить
    • Ну, может в сумме как раз два байта под нее не будут учитываются. Фиг ее знает, эту функцию.
      Ответить
  • Там все равномерно размазано. `ptr` объявлен с типом `BYTE *`. Какого хрена тогда `ptr + 2` явно приводится к `BYTE *` если оно и так `BYTE *`? Далее, если в программе уже имеется некий тип `BYTE`, то зачем при вычислении `ptr[4]` (и `ptr[5]`) приведение вдруг делается к типу `char`? (Который может оказаться еще и знаковым). Также и ежу понятно, что делать `& 0xff` для результата `% 256` смысла никакого нет, ибо `% 256` - это и есть `& 0xff` 🙂 Более того, если нас в итоге интересует результат типа `BYTE`, то вообще незачем делать ни `% 256`, ни `& 0xff` в обоих случаях, ни приведение типа в обоих случаях.
    Ответить
    • Там на несколько тысяч строк "равномерно размазано". Я делюсь тем, что улыбает =)
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8