Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.05;
Скачать: CL | DM;

Вниз

Как 4 byte привести к longword   Найти похожие ветки 

 
novai   (2009-02-19 14:34) [0]

как реализовать подобную функцию
function 4bytetoword(a,b,c,d:byte):longword;


 
Медвежонок Пятачок ©   (2009-02-19 14:37) [1]

Move()


 
Palladin ©   (2009-02-19 14:37) [2]

function 4bytetoword(a,b,c,d:byte):longword;
Var
 l:Array [0..3] of Byte Absolute Result;
Begin
 l[0]:=
 l[1]:=
 l[3]:=
 l[4]:=
End.


 
MBo ©   (2009-02-19 14:38) [3]

Один из способов (порядок  зависит от потребностей)
Result := (a shl 24) or (b shl 16) or (c shl 8) or d;


 
Сергей М. ©   (2009-02-19 14:39) [4]

реализация напрямую зависит от требуемого порядка следования байтов-параметров в результирующем лонгворде


 
novai   (2009-02-19 14:40) [5]

те я имел ввиду, чтобы имея 4 byte объеденить их или сгруппировать в longword


 
Юрий Зотов ©   (2009-02-19 14:41) [6]

function PackToLongWord(a, b, c, d: byte): LongWord;
begin
 Result = a shl 24 or b shl 16 or c shl 8 or d
end;


 
novai   (2009-02-19 14:45) [7]

спасибо всем, все упаковалось!


 
Юрий Зотов ©   (2009-02-19 14:52) [8]

> novai   (19.02.09 14:45) [7]

Следующий вопрос будет - а как теперь распаковать?
:o)

a := LW shr 24;
b := (LW and $FF0000) shr 16;
c := (LW and $FF00) shr 8;
d := LW and $FF;


 
han_malign ©   (2009-02-19 14:56) [9]

еще 5 копеек
type
   TLongWord = packed record
      case Integer of
      0: ( b1,b2,b3,b4: byte );
      1: ( wLo, wHi: word );
      2: ( dw: LongWord );
   end;


 
novai   (2009-02-19 14:57) [10]

Спасибо Юрий, но распаковывать не надо), но все же интересно как если например result такого типа:
byte4 = record
 a,b,c,d:byte;
end;


 
han_malign ©   (2009-02-19 15:09) [11]


> если например result такого типа
> byte4 = record

...
with Result do begin
см. Юрий Зотов ©   (19.02.09 14:52) [8]
end;
...
var __dwResult: LongWord absolute Result;
...
type Pbyte4 = ^byte4;
Result:= Pbyte4(@dw)^;

(хотя, кажется, и Result:= byte4(dw) прокатит)
...
type
  TLongWord = packed record
     case Integer of
     0: ( four_byte: byte4 );
     1: ( wLo, wHi: word );
     2: ( dw: LongWord );
  end;
lw.dw:= dw;
Result:= lw.four_byte;


 
novai   (2009-02-19 15:20) [12]


> han_malign ©   (19.02.09 15:09) [11]

принял к сведению (записал на будущее) огромное, человеческое спасибо Вам всем от новичка


 
Юрий Зотов ©   (2009-02-19 15:23) [13]

> novai   (19.02.09 14:57) [10]

TByte4 = packed record
a, b, c, d: byte;
end;

function UnpackLongWord(LW: LongWord): TByte4;
begin
 Result := TByte4(LW);
end;


 
Jack128_   (2009-02-19 15:27) [14]

народ, акститесь.. В SysUtils уже обявлены эти рекорды для подобных задач.   LongRec/WordRec/Int64Rec...  
RTFS


 
Юрий Зотов ©   (2009-02-19 15:35) [15]

> Jack128_   (19.02.09 15:27) [14]

Так каждый ламер сможет. А мы, ][акер"ы легких путей не ищем!


 
Anatoly Podgoretsky ©   (2009-02-19 15:36) [16]


> Jack128_   (19.02.09 15:27) [14]

Успел ответить, ну нравятся людям самодельные лисапеды, но с другой стороны и польза есть.


 
palva ©   (2009-02-19 22:15) [17]

Не очень экономно делать сдвиги на 24 бита. Время выполнения сдвига зависит от величины сдвига. так что лучше так:
n = (((b1 shl 8 or b2) shl 8 or b3) shl 8) or b4


 
Германн ©   (2009-02-20 01:04) [18]


> han_malign ©   (19.02.09 14:56) [9]

Моё любимое решение.



Страницы: 1 вся ветка

Текущий архив: 2009.04.05;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
15-1233843681
stas
2009-02-05 17:21
2009.04.05
Эксперты: Развитие технологий приведет к гибели человечества


15-1233414772
axis_of_evil
2009-01-31 18:12
2009.04.05
переключение сетевых настроек


15-1233814999
Vlad
2009-02-05 09:23
2009.04.05
Delphi


6-1201972877
..::KraN::..
2008-02-02 20:21
2009.04.05
Documents and Settings - доступ по FTP закрыт...


2-1234453501
Oleg_teacher
2009-02-12 18:45
2009.04.05
Серийный номер мат. платы