1. C++ / Говнокод #4542

    +164

    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, 05 Ноября 2010

    Комментарии (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` в обоих случаях, ни приведение типа в обоих случаях.
      Ответить
      • Там на несколько тысяч строк "равномерно размазано". Я делюсь тем, что улыбает =)
        Ответить

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