Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизОтобразить 4 байта Найти похожие ветки
← →
Ш-К (2007-05-31 05:22) [0]У меня есть число Integer, в нутрях выглядит так:
TValue = record
X, Y, Z, W: Byte;
end;
Мне надо переставить байты, чтобы получилось:TValue = record
Z, Y, X: Byte;
end;
а вместо W - 0.
Непример:
$AF223344 -> $00443322
$EEAABBCC -> $00CCBBAA
Я могу разделить исходное число 3 раза на 255, получить байты, переставить их, а потом, умножая их на 255, 255^2, 255^3, сложить.
Но хочется узнать, какое есть красивое решение?
← →
SlymRO © (2007-05-31 05:38) [1]
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils,WinSock;
var i:integer;
begin
i:=$AF223344;
writeln(IntToHex(i,8));
i:=htonl(i) shr 8;
writeln(IntToHex(i,8));
readln;
end.
← →
MBo © (2007-05-31 06:49) [2]ассемблерная инструкция bswap устроит?
если нет, то
i := ((i and $FF) shl 16) or (i and $FF00) or ((i shr 16) and $FF)
← →
sniknik © (2007-05-31 08:14) [3]type
TValue = record
X, Y, Z, W: Byte;
end;
var
i: integer;
begin
....
with TValue(i) do begin
W:= X;
X:= Z;
Z:= Y;
Y:= X;
X:= 0;
end;
← →
Ш-К (2007-05-31 08:34) [4]Класс
← →
X9 © (2007-05-31 08:40) [5]> [4] Ш-К (31.05.07 08:34)
> Класс
Точно. Особенно, если TValue объявить как packed record и привести к типу Integer.
← →
sniknik © (2007-05-31 08:41) [6]"красивее"
type
TValue = packed record
X: Byte;
YZ:Word;
W: Byte;
end;
var
i: integer;
begin
....
with TValue(i) do begin
W:= X;
swap(YZ);
X:= 0;
end;
← →
Kolan © (2007-05-31 09:05) [7]> «красивее»
Еще «красивши» сделать в записи метод типа Assign и выше сказаное проделать там…
← →
Barloggg (2007-05-31 09:14) [8]и еще один способ можно в эту кучу добавить
type TValue=packed record
case integer of
0: (TInteger:Integer);
1: (X, Y, Z, W: Byte);
end;//главное чтобы сошлось по числу байт
var tmp:byte;
var i:Tvalue;
begin
...
i.Tinteger:=нужное число
tmp:=i.y;
i.y:=i.z;
i.z:=tmp
← →
Barloggg (2007-05-31 09:17) [9]ой не глянул в задачу надо так (см [3])
i.W:= i.X;
i.X:= i.Z;
i.Z:= i.Y;
i.Y:= i.X;
i.X:= 0;
← →
Anatoly Podgoretsky © (2007-05-31 21:42) [10]> Ш-К (31.05.2007 05:22:00) [0]
LongRec
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c