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

Вниз

Отобразить 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 и выше сказаное проделать там&#133


 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
2-1180643028
Tr
2007-06-01 00:23
2007.06.24
Columns[0].Visible


2-1179403094
kubatura
2007-05-17 15:58
2007.06.24
игнорирование регистра в запросе


2-1180679385
сирх
2007-06-01 10:29
2007.06.24
немогу разобраться с мемо


3-1175200234
MoRoBoy
2007-03-30 00:30
2007.06.24
форма в DBGrid


2-1180612312
pathfinder
2007-05-31 15:51
2007.06.24
Передача объекта как параметра..