Главная страница
    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.033 c
1-1100933147
Rocket
2004-11-20 09:45
2004.12.05
Проблема NUXI (преобразование endian)


1-1101227757
fashionguide
2004-11-23 19:35
2004.12.05
Вопрос с работой курсора


3-1099547585
DimDim
2004-11-04 08:53
2004.12.05
Что за база?????


14-1100628533
ИМХО
2004-11-16 21:08
2004.12.05
Ладно, пошел спать!


14-1100518395
Rule
2004-11-15 14:33
2004.12.05
Rational Rose, Model Maker, Bold





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