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

Вниз

Разложить Integer (32бита) на 4 байта   Найти похожие ветки 

 
John Kayfolom ©   (2002-09-16 15:52) [0]

Что-то туплю я откровенно. Подскажите как сделать сабж. Подробнее: есть переменная A : Integer, мне надо ее разрезать на байты, т.е. получить четыре переменные B1,B2,B3,B4 : Byte;
Хочеться максимально быстрый код.
Заранее благодарю.


 
pasha_golub ©   (2002-09-16 16:13) [1]

Все что вспомнить могу, так это Lo & Hi.


 
Alx2 ©   (2002-09-16 16:13) [2]

var A : Integer;
Bytes : packed array [0..3] of byte absolute A;
begin
Bytes[0] - 0-й байт A
Bytes[1] - 1-й байт A
Bytes[2] - 2-й байт A
Bytes[3] - 3-й байт A


 
REA   (2002-09-16 16:15) [3]

Опиши структуру типа такой:
TIntRec = packed record
Case 0: i: Intger;
Case 1: ia: Array [1..4] Of Byte;
End;
PIntRec = ^TIntRec;
далее
p: PIntRec;
p := @IntVar; и далее p.ia[i] доставай.

PS: за ошибки в коде ответственности не несу


 
VaS ©   (2002-09-16 16:15) [4]

var
i: integer;
pb: pbyte;
b1, b2, b3, b4: byte;
b: array [0..3] of byte;

begin
i:=456;
//v1
pb:=@i;
b1:=pb^;
Inc(pb);
b2:=pb^;
Inc(pb);
b3:=pb^;
Inc(pb);
b4:=pb^;
//v2
Move(i, b, 4);
end;


 
John Kayfolom ©   (2002-09-16 16:45) [5]

Всем спасибо, особливо REA, сделал по его наводке:

Type TByteArray = packed record
Case Byte of
0: (i: Integer);
1: (b: Array [1..4] Of Byte);
end;
Var ByteArray : TByteArray;
B1,B2 : Byte;
begin
ByteArray.i:=666666;
B1:=ByteArray.b[1];
B2:=ByteArray.b[2];

И так далее.




 
Внук ©   (2002-09-16 17:49) [6]

Насчет "максимально быстрый" - packed record обычно сопряжен с потерей времени при доступе к данным. Хотя решение красивое внешне, я бы через битовые операции присвоил эти байты отдельным переменным. Само собой, imho :)


 
Esu ©   (2002-09-16 19:38) [7]

i and $FF000000 shr 24
i and $FF0000 shr 16
i and $FF00 shr 8
i and $FF



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
14-85673
MJH
2002-09-01 05:34
2002.09.26
WinXP + WMP9


1-85450
Micah'GF
2002-09-15 18:22
2002.09.26
Прога держит винду


4-85746
anod
2002-08-08 14:01
2002.09.26
Как


3-85340
MB250
2002-09-04 07:58
2002.09.26
Проверка существования индекса


14-85671
dr.karter
2002-08-30 16:20
2002.09.26
Ищу Сибиряков