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

    +111

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public static byte[] Length_Hex(long _Length)
            {
                byte[] Buf = { (byte)(_Length >> 0), (byte)(_Length >> 8), (byte)(_Length >> 16), (byte)(_Length >> 24) };
                return Buf;
            }

    Кривой велик

    Запостил: Nigma143, 06 Августа 2010

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

    • Ну, разбивает int на массив байтов, и что с того.

      В С можно так сделать
      char * buf = (char *) &length;
      Ответить
      • Я говорю велик же
        можно так BitConverter.GetBytes()
        Ответить
      • не int а long
        Ответить
        • А... Ну я на 32-битном C вырос там int и long длиной 32 бита. C# поверхностно знаю, большая там иерархия классов.
          Но если делаешь что-то, конечно нужно документацию почитать.
          Ответить
    • Может необходимо было извлечь только младшее слово из long. Код вполне корректный, самоочевидный и не требующий привлечения дополнительных классов. К тому же, выполняющий задачу одной операцией. А вот тот кто публиковал, видимо, с двоичной математикой не дружит....
      Ответить
      • Тогда посути какого хрена использовать long (8 байтовый), всеровно функция возвращает 4 байта. Наверно лучше всётаки юзать int(Int32)
        Ответить
        • Если для Вас столь критичны лишние 4 байта, то, наверное, нужно пользоваться для программирования C или Assembler, а не управляемый язык.
          Ответить
          • Ты! Шлангист. Это сайт говно кода
            Я тебе объясняю какого хрена использовать long как входящий пераметр в метод если оно возращает 4 байта! - Это раз
            И 2 - какого хрена юзать этот велик если есть готовый "BitConverter.GetBytes()"
            Ответить
            • 1. использовать в качестве входного параметра long может быть нужно для того, чтоб не преобразовывать переменную типа long к int, и тем самым, не ставить условия задачи в зависимость от значения аргумента.
              2. Откомпилируйте оба метода, и посмотрите сколько строк IL кода они занимают рефлектором.
              3. Из полученного массива через BitConverter.GetBytes() нужно извлечь еще необходимые 4 байта. Код же, возвращает именно то, что нужно.
              4. При передачи по сети крайне важно чтоб последовательность байт была строго определенная, и в данном коде их можно передать как угодно. Хоть поочередно.
              5. Из кода видно, что тот кто его писал имеет много больший опыт программирования чем имеется у тебя.
              Ответить
      • Таки всётаки это гавнокод!
        Ответить
      • И если наконец ты меня понял. То лучше юзать BitConverter.GetBytes()
        Ответить
        • Чем лучше?
          Ответить
          • Ты тупой?
            public static byte[] Length_Hex(int_Length)
            {
            byte[] Buf = { (byte)(_Length >> 0), (byte)(_Length >> 8), (byte)(_Length >> 16), (byte)(_Length >> 24) };
            return Buf;
            }

            А если вдруг ты скажешь например что значение может быть больше чем int32 то используем:
            long d = .....;
            int a = (int)d;
            размер порешится до размера int32
            Ответить
            • Что-то не припомню, чтоб в int содержалось более 32 бит, а значит сдвиг на 24 бита всегда вернет старший байт int значения.
              Ответить
          • И если наконец ты понял, то лучше юзать BitConverter.GetBytes()!!!,
            ЛЮДИ объясните чуваку что он тормоз и именно ему надо читать мат-часть раздел!!!
            Ответить
            • Судя по тому, что ты не можешь ответить на простой вопрос, можно с уверенностью предполагать, что ты сам не знаешь чем лучше BitConverter битового сдвига.
              Ответить
    • static void Main(string[] args)
      {
      byte[] mass = Length_Hex(15465324426);
      }

      public static byte[] Length_Hex(long _Length)
      {
      byte[] Buf = { (byte)(_Length >> 0), (byte)(_Length >> 8), (byte)(_Length >> 16), (byte)(_Length >> 24) };
      return Buf;
      }
      Ответить
    • byte[] mass = BitConverter.GetBytes(15465324426);
      Ответить
    • Или если тебе хочется получить именно 4 байта с функции то:
      long L = 15465324426;
      byte[] mass = BitConverter.GetBytes((int)L);

      Так как при больших значения ты можешь получить из перегружённого метода 8 байт как long
      Ответить

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