Главная страница
    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.04 c
2-1180612312
pathfinder
2007-05-31 15:51
2007.06.24
Передача объекта как параметра..


3-1175490505
Карелин Артем
2007-04-02 09:08
2007.06.24
Компоненты прямого доступа для DBF подскажите.


15-1180174891
Лан
2007-05-26 14:21
2007.06.24
увеличение скорости.


15-1180424920
Механик
2007-05-29 11:48
2007.06.24
прога


15-1180444764
lookin
2007-05-29 17:19
2007.06.24
Кабель сетевой, хаб etc...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский