Текущий архив: 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.46 MB
Время: 0.03 c