![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть ли стандартная функция для получения нижнего слова?
Cosinus © (2004-12-21 15:12:00)То есть что то типа HiWord(Value:longword):word?
Cosinus (2004-12-22 10:31:00) [1]
> 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;
palva (2004-12-22 10:07:00) [2]А в 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.
По-моему, это логичней.
begin...end (2004-12-21 20:25:00) [3]Так, а у меня в [3] лишнее: в HiWord3 вместо Result := (Value and $FFFF0000) shr 16можно просто Result := Value shr 16.
VMcL (2004-12-21 20:21:00) [4]>> Cosinus © (21.12.04 15:12)
Для нижнегослова функция не нужна.
var
a: Word;
b: LongWord;
//...
a := Word(b);
VaDima (2004-12-21 19:20:00) [5]LoWord := PWORD(@DWordValue)^
begin...end (2004-12-21 19:18:00) [6]> 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.
begin...end (2004-12-21 16:42:00) [7]> Cosinus © (21.12.04 15:12)
> Есть ли стандартная функция для получения нижнего слова?
Стандартной функции, предназначенной именно для этого, нет.
Тем не менее, есть вариантные записи ([1]), директива absolute, функция CopyMemory, тип Pointer и т.д.
Anatoly Podgoretsky (2004-12-21 15:30:00) [8]Может заднего?
LongRec