Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
ВнизКак 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c