Приведение типов
От: Аноним  
Дата: 05.08.05 08:57
Оценка:
a: array[1..10] of byte;
b: Longword;
Если просто написать b:=a[3] — b будет равно байту №3 массива,
а мне нужно чтобы он брал четыре байта (размер Longword) начиная с 3го.
Как это сделать?
Re: Приведение типов
От: Oleg A. Bachin Украина  
Дата: 05.08.05 09:02
Оценка: 5 (2)
Здравствуйте, <Аноним>, Вы писали:

А>a: array[1..10] of byte;

А>b: Longword;
А>Если просто написать b:=a[3] — b будет равно байту №3 массива,
А>а мне нужно чтобы он брал четыре байта (размер Longword) начиная с 3го.
А>Как это сделать?

type
  PLongWord = ^LongWord;
    
    b := PLongWord(@a[3])^;
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Best regards,
Oleg A. Bachin
Re: Приведение типов
От: Dimonka Верблюд  
Дата: 05.08.05 09:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>a: array[1..10] of byte;

А>b: Longword;
А>Если просто написать b:=a[3] — b будет равно байту №3 массива,
А>а мне нужно чтобы он брал четыре байта (размер Longword) начиная с 3го.
А>Как это сделать?

Не понял, как из байта можно вычесть четыре байта?

Для того, чтобы получить доступ к третьему байту b можно сдвинуть и выделить по маске:

b := a[3] - (b shr 16) and 255



По идее можно получить байт через обьявление другого типа:

type
  TDWordHack = packed record
    b1, b2, b3, b4: byte
  end;

b:= a[3] - TDWordHack(b).b3;

Кажется должно работать
Re: Приведение типов
От: BeeNokle Россия  
Дата: 05.08.05 10:59
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>a: array[1..10] of byte;

А>b: Longword;
А>Если просто написать b:=a[3] — b будет равно байту №3 массива,
А>а мне нужно чтобы он брал четыре байта (размер Longword) начиная с 3го.
А>Как это сделать?

Эх, давно это было… Но вроде как делается так
b:=Longword(a[3]);
Разработка и продвижение сайтов:
<a href="http://www.inform-s.ru/">http://www.inform-s.ru/&lt;/a&gt;
Re[2]: Приведение типов
От: Аноним  
Дата: 05.08.05 16:55
Оценка:
Здравствуйте, BeeNokle, Вы писали:

BN>Здравствуйте, Аноним, Вы писали:


А>>a: array[1..10] of byte;

А>>b: Longword;
А>>Если просто написать b:=a[3] — b будет равно байту №3 массива,
А>>а мне нужно чтобы он брал четыре байта (размер Longword) начиная с 3го.
А>>Как это сделать?

BN>Эх, давно это было… Но вроде как делается так

BN> b:=Longword(a[3]);

Нет, так мы лишь расширим байт до границ DWORD. Через указатели надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.