1. Pascal / Говнокод #10930

    +95

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    function IntToHex(Num: Int64; Digits: Byte): String;
    type
      DataInt = Array[0..7] of Byte;
    var
      I:Byte;
      Data: ^DataInt;
    begin
      Data := @Num;
      Result := '';
      for I := Trunc(Digits/2)-1 downto 0 do begin
        if SizeOf(DataInt) < I then
          Result := Result+'00'
        else begin
          case Data^[I] of
            0: Result := Result+'00';
            1: Result := Result+'01';
            2: Result := Result+'02';  
            { ........... }
            253: Result := Result+'FD'; 
            254: Result := Result+'FE';      
            255: Result := Result+'FF';
           end;
        end;
      end;
    end;

    Давно писал функцию для перевода числа в 16-ричное представление.
    Причина - нужно было отдельную функцию без лишнего.
    Вот такой вот жестокий быдло код :))

    Запостил: haker, 13 Июня 2012

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

    • Вы терпеливый человек с железной силой воли. Я бы на 10 уже забил.
      Ответить
      • а я бы 3-х уже не вынес...
        Ответить
      • я не терпеливый :) Я хитрый :) Все эти 256 строчек были сгенерированы автоматически
        Ответить
        • Метапрограммирование во все поля!
          Ответить
        • по-хакерски, однако
          Ответить
        • аааа... зачем это все?
          в том смысле, что мешает идею кода, который генерирует все это, использовать здесь?
          Ответить
          • > что мешает идею кода, который генерирует все это, использовать здесь
            Страсть к байтоебству и преждевременной оптимизации.
            Ответить
            • хотелось бы услышать ответ от хитрого хакера...
              Ответить
    • Объявление указателя не нужно и только мешает.
      Хреновый ты кулхацкер.
      Надо так:
      var Data: array [0..7] of byte absolute Num;
      Ответить
      • Ужос. Вирт в гробу переворачивается. Лучше уж стасик каст.
        Ответить
        • не лучше, а привычнее для "не-паскалиста".
          а вообще, это все делается через format(format('%%.%dx', [Digits]), [Num]);
          Ответить
        • Стасик, иди домой! Пора кушать!
          Ответить
        • реинтерпрёт же
          Ответить
      • а чому не так? (чи там байти якось переплутані? при вигрузці зі стеку вони в зворотньому подяку йдуть...)

        [code=pascal]
        function IntToHex(Num: Int64; Digits: Byte): String;
        const
        HexCharSet = '0123456789ABCDEF'
        var
        I: Integer;
        begin
        for I := Digits downto 0 do
        Result := Result + HexCharSet[(Num shr I * 4) and $F];
        end;[code]
        Ответить
        • function IntToHex(Num: Int64; Digits: Byte): String;
          const
            HexCharSet = '0123456789ABCDEF'
          var
            I: Integer;
          begin
            for I := Digits downto 0 do
              Result := Result + HexCharSet[(Num shr I * 4) and $F];
          end;
          Ответить
        • тест
          begin

          [code]begin[/code=pascal]
          begin

          begin
          Ответить
        • Ну это же не так кулхацкерно.
          Ответить
    • Надо было по полбайта работать, всего 16 значений. (Вышло на правах капитана очевидность)
      Ответить
      • По два байта быстрее
        Ответить
        • на 80286 в реальном режиме? :-)
          Ответить
          • И это тоже. Кстати, в турбопасе Move сделан через rep movsb, поэтому тупой цикл фором с копированием вордов был быстрее.
            Ответить
            • Машинные слова в 16 бит устарели как бы 20 лет назад, давайте лучше вспомним 8080, для которого это было оптимально :-)
              Ответить
        • Да что мелочиться. Сразу по 4. Запиливаем кейс на 4млрд вариантов и вперед.
          Ответить
    • Кстати код говно. Результат зависит от того big-endian или little-endian текущая платформа.

      Trunc(Digits/2) - операция с флоатом, очень сочетается с прочим байтоебством и оптимизациями.
      Ответить
      • > Кстати код говно.
        .
                            __ggggggggggggg_                      
                         _g@@@@@@@@@@@@@@@@@@@yg_                 
                        g@9"       '"f9@@@@@@@@@@gg               
                      .@C                "9@@@@@@@@@g             
                     j&"                    'f@@@@@@@@_           
                     "ygyg                     '%@@@@@@y          
                    +'  ?9N_                     9@@@@@@@_        
                   f ._+_ 'T       .___          .%@@@@@@@_       
                  . /jgg k       !??ff9@N_       8@@@@@@@@@_      
                 ."  *9f!"+      .+ _    \      g@@@@@@@@@@@      
                s"      .*  _   t pN_"~         @@@@@@@@@@@@C     
                '     .+    f    'ff_++        .@@@@@@@@@@@@@     
               !    <       "                  8@@@@@@@@@@@@@     
                  _*"T       'L               j@@@@@@@@@@@@@@     
                 l"     '""                   %@@9""%@@@@@@@      
               T "                           *"    C[@@@@@@       
        _yggg@@N   l0-+.._     j                !_. 8@@@@@        
        @@@@@@@@    1@gg______ 8               .._Lj@%%%%___      
        @@@@@@@@     -'f8@@f"  "              **"_j@@@@@@@@@@@Nggg
        @@@@@@@@                            "_yg@@@@@@@@@@@@@@@@@@
        @@@@@@@@                            _8@@@@@@@@@@@@@@@@@@@@
        @@@@@@@@   "                _+     j@@@@@@@@@@@@@@@@@@@@@@
        @@@@@@@@g                _~!'    +"@@@@@@@@@@@@@@@@@@@@@@@
        @@@@@@@@@gg__           '     _r" j@@@@@@@@@@@@@@@@@@@@@@@
        @@@@@@@@@@@C !t "'         _u^"   8@@@@@@@@@@@@@@@@@@@@@@@
        @@@@@@@@@@@@   "+        <*"     [@@@@@@@@@@@@@@@@@@@@@@@@
        Ответить
      • > bormand
        > Pascal
        > big-endian или little-endian текущая платформа
        Мне кажется, я знаю ответ.
        Ответить
        • 1) "Free Pascal (aka FPK Pascal) is a 32 and 64 bit professional Pascal compiler. It can target multiple processor architectures: Intel x86, AMD64/x86-64, PowerPC, PowerPC64, SPARC, and ARM"
          2) "The endianness of the 32-bit SPARC V8 architecture is purely big-endian."

          > Мне кажется, я знаю ответ.
          Поведайте нам его, пожалуйста, о великий и могучий guest!
          Ответить
          • а у борлланда кодогенератор приварен к интелу...
            Ответить
            • > 6 мая 2009 стало достигнуто соглашение о продаже Borland Software за $75 млн британской компании Micro Focus, специализирующейся на поддержке крупных корпоративных систем на языке COBOL.

              R.I.P.
              Ответить
              • они много чего распродали, всяки вордперфекты с парадоксами
                Ответить
          • >великий и могучий guest
            это geust - хилый закос под настоящего гвеста. Клацни по нику,
            id != 1

            Это Глот с планеты Катрук. Вот настоящий доктор Верховцев...
            Ответить
            • Интересно, а ник guеst уже занят?
              Ответить
              • http://govnokod.ru/user/1
                Ответить
              • Логин может содержать только латинские буквы, цифры, дефис и знак подчеркивания

                А раньше можно было...
                Ответить
                • Дык, вроде бы уже кто-то набигал со всем богатством Уникода.
                  Ответить
                  • А залго-пользователи были?
                    Ответить
                    • Не помню такого.
                      Страйко, ты зачем сбрил усы выпилил Уникод?
                      Ответить
                    • :)
                      ОБСЛУЖУ В ЖЕНСКОМ БЕЛЬЕ КАВКАЗЦЕВ ТАДЖИКОВ УЗБЕКОВ НА СТРОЙКАХ РЫНКАХ СМС 89119017975 ИЩУ СУТЕНЕРА КАВКАЗЦА АЗИАТА МОЖНО ВЛАСТНУЮ ЖЕНЩИНУ 89119017975
                      Ответить
    • показать все, что скрытоКакой багор )))
      Ответить

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