Главная страница
    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.45 MB
Время: 0.007 c
3-85374
delphiwhat
2002-09-05 10:28
2002.09.26
Вопрос про базу (*.db) и Delphi6. Помогите понять.


1-85545
Демонов Е.В.
2002-09-13 15:30
2002.09.26
Как Перерисовать заголовок формы


14-85692
J.Silver
2002-08-27 22:35
2002.09.26
Помогите найти прогу...


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


1-85530
Aristarh
2002-09-13 14:15
2002.09.26
Перерисовка формы в цикле с жутким морганием





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский