![]() |
|
|
#1
|
||||
|
||||
|
Мож кто знает методу попроще для того чтобы развернуть число.
Код:
function GetCardinalByte(p:pointer;ix:integer):byte;
begin
Result:=PByteArray(p)^[4-ix];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
data:Cardinal;
s:string;
i: Integer;
begin
data:=$01020304;
s:='';
for i := 1 to 4 do
s:=s+IntToHex(GetCardinalByte(@data,i),2)+' ';
ShowMessage(s);
end;![]() ЗЫЖ Умники с советами IntToHex(data,8) сразу идут мимо, мне нужно число, а не строка. Строка в коде для примера. |
|
#2
|
||||
|
||||
|
Код:
mov eax, $01020304 mov edx, eax shr edx, 16 xchg dh, dl xchg ah, al shl eax, 16 mov ax, dx |
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Aristarh Dark (09.08.2012)
| ||
|
#3
|
||||
|
||||
|
Сенк, работает.
|
|
#4
|
||||
|
||||
|
в WinSock есть функция htonl
|
|
#5
|
||||
|
||||
|
NumLock, спасибо, но внешние модули подтягивать не желательно.
Совмесно с M.A.D.M.A.N. было написано две процедуры: Код:
procedure SetCardinal(const Value:Cardinal; Dest:Pointer); begin asm mov eax, Value mov edx, eax shr edx, 16 xchg dh, dl xchg ah, al shl eax, 16 mov ax, dx mov ecx, Dest mov [ecx], eax end; end; Код:
procedure SetWord(const Value:Word; Dest:Pointer); begin asm mov ax, value xchg ah, al mov ecx, Dest mov [ecx], ax end; end; Первый параметр - что, второй - указатель куда положить. |