Форум: "Основная";
Текущий архив: 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