Главная страница
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.021 c
3-1175167004
Draught
2007-03-29 15:16
2007.06.24
запрос с суммированием текстового поля


2-1181029853
CodeGear Delphi for Win 32
2007-06-05 11:50
2007.06.24
как распокавать zip


1-1177569767
StriderMan
2007-04-26 10:42
2007.06.24
List из TNotifyEvent ов


10-1134133062
LORN
2005-12-09 15:57
2007.06.24
ексель->панель инструментов


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