Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 и выше сказаное проделать там&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.042 c
2-1180607805
Serg1968
2007-05-31 14:36
2007.06.24
О запуске копии формы


15-1180439083
Богдан1024
2007-05-29 15:44
2007.06.24
<META Name="keywords" Content="">


3-1175484266
Gromozeka
2007-04-02 07:24
2007.06.24
Большой размер .exe - файла


2-1180639073
deras
2007-05-31 23:17
2007.06.24
Помогите с алгоритмом поиска...


15-1180332884
Мальчик из песочницы
2007-05-28 10:14
2007.06.24
Уго Чавес отменил вступительные экзамены в вузы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский