![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
часто сталкиваюсь с ситуацией, когда в файле содержится перевернутое число. для того чтобы число стало нормальным его байты необходимо перевернуть. в delphi для свопирования целых 2х байтных чисел есть функция swap.
для целых 4х байтных мне посчастливилось найти функцию реализованную на ассемблере: Код:
function SwapDWorD(X:DWord):dword;assembler; asm bswap eax end; |
|
#2
|
||||
|
||||
|
Самопал:
Код:
a := (a shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24); Можно и так: Код:
a := Swap(a shr 16) or (Swap(a) shl 16); |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Tonyy (23.05.2013)
| ||
|
#3
|
|||
|
|||
|
Ну если можно использовать SwapDWord, то наверно так -
Код:
SwapSingle(X:Single):Single;
var
R:record
case boolean of
true: (Y:Single);
false: (Z:Dword);
end;
begin
R.Y:=X;
R.Z:=SwapDWorD(R.Z);
Result:=R.Y;
end;ну и до кучи Код:
SwapDouble(X:Double):Double;
var
R:record
case boolean of
true: (Y:Double);
false: (Z1,Z2:Dword);
end;
Z:Dword;
begin
R.Y:=X;
Z:=SwapDWorD(R.Z1);
R.Z1:=SwapDWorD(R.Z2);
R.Z2:=Z;
Result:=R.Y;
end; |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
приведенные реализации, как я понял, только ведь для целых чисел, так?
а как все-таки свопировать тип single? |
|
#6
|
||||
|
||||
|
Цитата:
Код:
var S: Single; begin S := Single(SwapDWord(LongWord(S)); end; |
|
#7
|
||||
|
||||
|
Цитата:
|
|
#8
|
||||
|
||||
|
Цитата:
|
|
#9
|
||||
|
||||
|
Цитата:
|