Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
14-85659
Дядя Будда
2002-08-30 17:42
2002.09.26
Повернутый DBGrid


3-85322
ev1972
2002-09-06 15:54
2002.09.26
Ошибка при редактировании полей типа TIME в Interbase Express


1-85491
IGORka
2002-09-16 20:22
2002.09.26
нажатие системной кнопки


1-85485
AFrolov
2002-09-16 17:31
2002.09.26
Как узнать какой флажок сняли/установили в TCheckListBox


1-85561
Dim!S
2002-09-13 13:09
2002.09.26
Размер папки




   Наверх