1. C# / Говнокод #23530

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    private static int CalcCheckSum(byte[] BinFile)
    {
          int length = ((IEnumerable<byte>) BinFile).Count<byte>();
          if (length > 0)
          {
                int num = 0;
                for (int index = 0; index < length; ++index)
                      num = num + (int) BinFile[index] & (int) ushort.MaxValue;
          }
          return num;
    }

    Израильский инновационный вариант rolling hash'а :facepalm:
    Здесь есть всё: и альтернативное определение длины массива, и обилие приведений к инту, и придающая особую таинственность битовая операция &
    На первый взгляд может показаться, что результатом будет простая сумма всех байт, но не дайте себя обмануть! Результат - это суперсекретная(!!!11) сумма всех байт.

    Запостил: PsychoTeras, 14 Ноября 2017

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

    • > Count<byte>();
      Считать только количество байт, на случай если в массиве есть значения другого типа.
      Ответить
      • Я боюсь спросить, а какие значения другого типа могут быть в объекте типа byte[]? :)
        Ответить
        • С точки зрения программиста, RAM — это один большой byte[]
          Ответить
          • С точки зрения программиста RAM - это один большой void*.
            Ответить
            • С точки зрения переводчика, RAM - это большой баран.
              Ответить
              • С точки зрения автомобилиста RAM - это большой пикап от DODGE.
                Ответить
                • С точки зрения анимуёба RAM - это большой повод пофапать.
                  Ответить
                  • >>с точки зрения
                    https://youtu.be/EQlfdzKunxY
                    Ответить
                  • С точки зрения RAMа сейчас самое время пофапать на большого барана в пикапе :)
                    Ответить
                  • Это должен был написать субару.

                    З.Ы. С точки зрения анимуёба-геймера RAM и ROM - это совсем другие персонажи.
                    Ответить
            • С точки зрения старого программиста void* - это char*.
              Ответить
              • И вот он "замкнутый круг" ))
                Ответить
                • да, ведь char это byte. Кстати, у MS есть в сишке тип BYTE:)
                  typedef unsigned char BYTE;

                  И знаете, иногда это лучше чем увидеть в старых (до C89) юниксовых API "char*" в вместо "void*".
                  А они там есть (в berkley sockets, например).
                  Ответить
          • (с) Царь
            Ответить
    • (хлопая глазами) а нельзя было их тупо шифтить итерироваться и складывать, как в школе?
      Ответить
      • а нет, есть же функцыональщина
        byte[] foo = {1, 2, 3, 4};
        var sum = foo.Sum(b => b);


        обожаю сишарп
        Ответить

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