Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

Проблема 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1100764397
sadykov
2004-11-18 10:53
2004.12.05
перерисовка ListView и TreeView


1-1100622476
Gear
2004-11-16 19:27
2004.12.05
Как запретить перерисовку отдельному компоненту?


1-1100868269
yura2
2004-11-19 15:44
2004.12.05
Как показать документ Word в окне своей программы?


3-1099672832
Danila
2004-11-05 19:40
2004.12.05
Счётчик в Interbase - как?


9-1091462459
Красный молоток
2004-08-02 20:00
2004.12.05
DDraw VSync