Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Быстрый перевод 2-х байт (слова) в целое


Автор: becks 7.9.2010, 09:49
Добрый день, господа! Такая ситуация, нужен оптимальнейший вариант для след. операции, так как время работы очень критично:

Есть два байта из которых нужно получить слово и перевести его в целое: bh-старший, bl-младший. Как мне средсвами Delphi сделать эту операции максимально экономичной по вермени?


На всякий случай пример того как у меня сделано, мало ли плохо объяснил: bh=254, bl=56. Я перевожу в 16-ричный: bh=FE, bl=38, склеиваю b=bh+bl=FE38 и перевожу в десятичное b=65080.  

Но меня это не устраивает так как операцию нужно делать десятки тысяч раз. Прошу вашей помощи, спасибо.

Автор: becks 7.9.2010, 10:18
Другими словами, оптимальный вариант для получения значения числа по его старшему и младшему байту

Автор: 0x0027 7.9.2010, 10:19
MakeWord

Автор: becks 7.9.2010, 10:43
Цитата(0x0027 @ 7.9.2010,  10:19)
MakeWord

Спасибо большое.

Автор: northener 7.9.2010, 13:25
Цитата(becks @  7.9.2010,  09:49 Найти цитируемый пост)
Такая ситуация, нужен оптимальнейший вариант для след. операции, так как время работы очень критично:

Вариант 1 отменяется
Факир был пьян и фокус не удался. smile 
Вариант 2
Код

type
  MyRecord = packed record
    case integer of
      0 : (bl, bh : Byte);
      1 : (MyWord : Word);
    end;  

Автор: Albinos_x 7.9.2010, 16:24
Цитата(becks @  7.9.2010,  09:49 Найти цитируемый пост)
Я перевожу в 16-ричный: bh=FE, bl=38, 

это зачем?) они у тебя строковые???

Автор: БелАмор 7.9.2010, 20:50
Цитата(northener @  7.9.2010,  13:25 Найти цитируемый пост)
var
  bl, bh : Byte;
  MyWord : Word absolute bl;

Так нельзя...
Во-первых, bl и bh выравниваются. Вы же не забыли указать для записи packed record
Во-вторых, если указано, что MyWord и bl располагаются по одному адресу, то это касается только их. Причем тут bh?

Автор: northener 7.9.2010, 21:37
Цитата(БелАмор @  7.9.2010,  20:50 Найти цитируемый пост)
Так нельзя...

Да, извиняюсь. Бес попутал. :(

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)