Школоло / Говнокод #10930 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 haker, (Updated )

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

  • Вы терпеливый человек с железной силой воли. Я бы на 10 уже забил.
    Ответить
    • я не терпеливый 🙂 Я хитрый 🙂 Все эти 256 строчек были сгенерированы автоматически
      Ответить
      • аааа... зачем это все?
        в том смысле, что мешает идею кода, который генерирует все это, использовать здесь?
        Ответить
        • > что мешает идею кода, который генерирует все это, использовать здесь
          Страсть к байтоебству и преждевременной оптимизации.
          Ответить
  • Объявление указателя не нужно и только мешает.
    Хреновый ты кулхацкер.
    Надо так:
    var Data: array [0..7] of byte absolute 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]
      Ответить
  • Надо было по полбайта работать, всего 16 значений. (Вышло на правах капитана очевидность)
    Ответить
        • И это тоже. Кстати, в турбопасе 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!
        Ответить

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

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

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


    8