![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поменять байты местами [D6, Win2k]
secher © (2005-03-14 12:41:00)подскажите плиз как поменять местами байты в переменной Word
например 0100 сделать 0001
secher (2005-03-15 04:16:00) [1]Sorry.. Вношу поправку данные в шестнадцатеричном виде
begin...end (2005-03-14 20:48:00) [2]Ещё с CopyMemory можно
default (2005-03-14 20:46:00) [3]можно ещё через ROR[ROL], три XOR'а, но быстрей всего через XCHG
palva (2005-03-14 20:09:00) [4]Где-то на этом форуме уже видел такую функцию:
function SwapW(i: Word): Word;
asm
XCHG al,ah
end;
Можно и в двойном слове байты в противоположном порядке разместить:
function SwapL(i: LongWord): LongWord;
asm
BSWAP eax
end;
Юрий К (2005-03-14 19:52:00) [5]w: Word;
pch: PChar;
ch: Char;
pch: = PCHAR(@w);
ch := pch[0];
pch[0] := pch[1];
pch[1]: = ch;
stakan (2005-03-14 17:43:00) [6]
var
L: Byte;
H: Byte;
R: Word;
begin
R := 0;
L := Lo(Исходное значение);
H := Hi(Исходное значение);
R := L;
R := R SHL 8;
R := R + H; //результат
Код несколько избыточен, для наглядности
begin...end (2005-03-14 16:29:00) [7]Согласен. Приношу извинения.
Юрий Зотов (2005-03-14 14:07:00) [8]Первый тоже...
:о)
TUser (2005-03-14 13:47:00) [9]второй and лишний
begin...end (2005-03-14 12:57:00) [10]> P.N.P. © (14.03.05 12:47) [2]
Кто ж его знает - может быть, он написал в шестнадцатеричной системе :-)
var
W: Word;
begin
W := ...;
W := ((W and $FF) shl 8) or ((W and $FF00) shr 8)
end.
P.N.P. (2005-03-14 12:47:00) [11]Если как в примере, то 4 shr 2,
см. хелп - Logical operators
begin...end (2005-03-14 12:42:00) [12]Например, с помощью функции Swap.