Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
3-85394
Ларик
2002-09-05 17:32
2002.09.26
как определить объявленную длину строкового поля таблицы


14-85656
Driverrr
2002-08-30 20:24
2002.09.26
String


3-85409
UnDISCOvery
2002-09-05 19:27
2002.09.26
Access 2000. Ошибка:


3-85363
maxim2
2002-09-05 06:15
2002.09.26
Надо узнать длину поля в таблице, незнаю как?


1-85463
PONTIY
2002-09-16 12:51
2002.09.26
Выдвинуть CD-ROM





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский