Главная страница
    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.47 MB
Время: 0.035 c
1-1100678158
Ega23
2004-11-17 10:55
2004.12.05
TTreeNodes.Delete


14-1100589983
ИМХО
2004-11-16 10:26
2004.12.05
1986 год: честно ли Динамо Киев стало чемпионом СССР?


14-1100661404
Думкин
2004-11-17 06:16
2004.12.05
С днем рождения! 17 ноября!


3-1099571426
Mih
2004-11-04 15:30
2004.12.05
Вопрос поиска.


8-1094490378
Klopan
2004-09-06 21:06
2004.12.05
mp3 player в DOS





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