Форум: "Основная";
Текущий архив: 2002.09.26;
Скачать: [xml.tar.bz2];
ВнизРазложить 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c