Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

Проблема NUXI (преобразование endian)   Найти похожие ветки 

 
Rocket ©   (2004-11-20 09:45) [0]

Сделал поиск по инету.
Ничего не нашёл лучше, чем.


   Function Reverse (N:LongInt) : LongInt ;
    Var B0, B1, B2, B3 : Byte ;
   Begin
       B0 := N Mod 256 ;
       N  := N Div 256 ;
       B1 := N Mod 256 ;
       N  := N Div 256 ;
       B2 := N Mod 256 ;
       N  := N Div 256 ;
       B3 := N Mod 256 ;
       Reverse := (((B0 * 256 + B1) * 256 + B2) * 256 + B3) ;
   End ;


или более эффективная версия:


   Function Reverse (N:LongInt) : LongInt ;
    Var B0, B1, B2, B3 : Byte ;
   Begin
       B0 := (N AND $000000FF) SHR  0 ;
       B1 := (N AND $0000FF00) SHR  8 ;
       B2 := (N AND $00FF0000) SHR 16 ;
       B3 := (N AND $FF000000) SHR 24 ;
       Reverse := (B0 SHL 24) OR (B1 SHL 16) OR (B2 SHL 8) OR (B3 SHL 0) ;
   End ;


Есть ещё эффективнее что-нибудь?


 
Rocket ©   (2004-11-20 10:15) [1]

Может то же самое на asm? Сам перевести не смогу, нужна помощь.


 
MBo ©   (2004-11-20 10:28) [2]


function Reverse(N: Integer): Integer;
asm
 bswap eax
end;

procedure TForm1.Button1Click(Sender: TObject);
var n: Integer;
begin
 n := $01020304;
 n := Reverse(N);
 Caption := IntToHex(N, 8);
end;


 
Rocket ©   (2004-11-20 10:37) [3]


> MBo ©   (20.11.04 10:28) [2]

Круто, Спасибо!
А чтоб в word"ах менять - так же?


 
MBo ©   (2004-11-20 10:47) [4]

>А чтоб в word"ах менять - так же?
есть функция Swap, или через сдвиги/or можно, или так:
mov ax, w (movzx eax,w)
bswap eax
shr eax,16


 
Anatoly Podgoretsky ©   (2004-11-20 10:49) [5]

Rocket ©   (20.11.04 10:37) [3]
XCHG ah, al


 
MBo ©   (2004-11-20 10:53) [6]

>XCHG ah, al
Ууу, и правда ;)


 
Rocket ©   (2004-11-20 10:57) [7]

ОК. Спасибо ещё раз.

А вот допустим у меня записано так.

03 04 01 02

А должно быть

01 02 03 04

Мат одним ходом возможен? :)


 
Anatoly Podgoretsky ©   (2004-11-20 11:03) [8]

Rocket ©   (20.11.04 10:57) [7]
Нет, мат в три хода


 
Anatoly Podgoretsky ©   (2004-11-20 11:05) [9]

ROR/ROL r,n


 
Anatoly Podgoretsky ©   (2004-11-20 11:06) [10]

Раз про АСМ, то тебе прямой путь на Интел за документацией, копия есть на моем сайте


 
Rocket ©   (2004-11-20 11:12) [11]


> Раз про АСМ, то тебе прямой путь на Интел за документацией

Да нет. Просто показалось, что с функцией на асм будет быстрее, хоть и в три хода.

И можно полностью ф-цию, которая делает то, что записано в [7]?

А то я что-то путаться начинаю уже :)


 
Anatoly Podgoretsky ©   (2004-11-20 11:18) [12]

В [9] в один ход


 
MBo ©   (2004-11-20 11:19) [13]

>И можно полностью ф-цию, которая делает то, что записано в [7]?
Как уже сказали, ROR eax,16


 
Rocket ©   (2004-11-20 11:23) [14]

OK!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
8-1091099262
WondeRu
2004-07-29 15:07
2004.12.05
DirectShow. Как воспроизвести сразу 2 видеокамеры?


6-1095885348
Ivanov_F.
2004-09-23 00:35
2004.12.05
Ограничение траффика


3-1099465064
onix
2004-11-03 09:57
2004.12.05
Картинки в БД


9-1089441229
OSokin
2004-07-10 10:33
2004.12.05
Создание логических игр


3-1099503672
MORA
2004-11-03 20:41
2004.12.05
Diagram page





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