Си диез / Говнокод #3891 Ссылка на оригинал

0

  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 Nigma143, (Updated )

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

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

    В С можно так сделать
    char * buf = (char *) &length;
    Ответить
      • А... Ну я на 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;
    }
    Ответить
  • Или если тебе хочется получить именно 4 байта с функции то:
    long L = 15465324426;
    byte[] mass = BitConverter.GetBytes((int)L);

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

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

Где здесь C++, guest?!

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


    8