Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Есть ли стандартная функция для получения нижнего слова?   Найти похожие ветки 

 
Cosinus ©   (2004-12-21 15:12) [0]

То есть что то типа HiWord(Value:longword):word?


 
Anatoly Podgoretsky ©   (2004-12-21 15:30) [1]

Может заднего?
LongRec


 
begin...end ©   (2004-12-21 16:42) [2]

> Cosinus ©   (21.12.04 15:12)

> Есть ли стандартная функция для получения нижнего слова?

Стандартной функции, предназначенной именно для этого, нет.

Тем не менее, есть вариантные записи ([1]), директива absolute, функция CopyMemory, тип Pointer и т.д.


 
begin...end ©   (2004-12-21 19:18) [3]

> Cosinus ©   (21.12.04 15:12)

Ну как, разобрался?

Если нет, то вот несколько примеров (получение старшего слова):

function HiWord1(Value: Longword): Word;
begin
 Result := LongRec(Value).Hi
end;

function HiWord2(Value: LongWord): Word;
var
 Val: array [0..1] of Word absolute Value;
begin
 Result := Val[1]
end;

function HiWord3(Value: LongWord): Word;
begin
 Result := (Value and $FFFF0000) shr 16
end;

function HiWord4(Value: LongWord): Word;
begin
 Result := PWord(Cardinal(@Value) + 2)^
end;

function HiWord5(Value: LongWord): Word;
begin
 CopyMemory(@Result, Pointer(Cardinal(@Value) + 2), 2)
end.


 
VaDima ©   (2004-12-21 19:20) [4]

LoWord := PWORD(@DWordValue)^


 
VMcL ©   (2004-12-21 20:21) [5]

>>Cosinus ©  (21.12.04 15:12)

Для нижнего слова функция не нужна.

var
 a: Word;
 b: LongWord;
//...
 a := Word(b);


 
begin...end ©   (2004-12-21 20:25) [6]

Так, а у меня в [3] лишнее: в HiWord3 вместо Result := (Value and $FFFF0000) shr 16 можно просто Result := Value shr 16.


 
palva ©   (2004-12-22 10:07) [7]

А в Free Pascal функция Hi работает по-другому.

Hi returns the high byte or word from X, depending on the size of X. If the size of X is 4, then the high word is returned. If the size is 2 then the high byte is returned. Hi cannot be invoked on types of size 1, such as byte or char.

По-моему, это логичней.


 
Cosinus ©   (2004-12-22 10:31) [8]


> begin...end ©   (21.12.04 19:18) [3]

Спасибо, но у меня так и было сделано. Меня просто интересовала стандартная.. Но все равно спасибо :))

> VMcL ©   (21.12.04 20:21) [5]

Естественно интересовало и "верхнее".

To All.
На самом деле я поторопился вчера вопрос задать. Вроде в справке рылся - и ничего не нашел, а сегодня с утра как на подбор :)The HIWORD macro retrieves the high-order word from the given 32-bit value.

WORD HIWORD(

   DWORD dwValue // value from which high-order word is retrieved
  );

The LOWORD macro retrieves the low-order word from the given 32-bit value.

WORD LOWORD(

   DWORD dwValue // value from which low-order word is retrieved
  );

HiLoWords
Unit: IdDNSResolver
Represents data with High and Low Word values.

HiLoWords = record
 HiWord: Word;
 LowWord: Word;
 end;



Страницы: 1 вся ветка

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
1-1103715246
Stanislav
2004-12-22 14:34
2005.01.09
Создание OLE объекта


14-1102655868
leonidus
2004-12-10 08:17
2005.01.09
Нужен совет тех кто использует качалки сайтов


1-1103812351
stelius
2004-12-23 17:32
2005.01.09
Факториал


1-1103647618
Илья
2004-12-21 19:46
2005.01.09
IOResult = 103


4-1101306815
MAINUSER
2004-11-24 17:33
2005.01.09
Ловись ENTER большой, ловись SHIFT маленький