delphi4arab منتديات دلفي للعرب
كيف اقوم بقلب string 32 bit - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : كيف اقوم بقلب string 32 bit (/showthread.php?tid=6117)



كيف اقوم بقلب string 32 bit - salah07230 - 24-04-2014

السلام عليكم

كيف اقوم بقلب string 32 bit مثلا هذه القيمة 3FAB2000وتصبح 0020AB3F
وشكرا لكم


كيف اقوم بقلب string 32 bit - SMP3 - 24-04-2014

و عليكم السلام .
PHP كود :
function Swap(A: Integer): Integer;
asm
  
{$IFDEF CPUX64}
  
MOV EAX,ECX
  
{$ENDIF !CPUX64}
  
BSWAP EAX
end
; 
الاستعمال :
PHP كود :
Caption := IntToHex(Swap($3FAB2000), 8);//Result = $0020AB3F 



كيف اقوم بقلب string 32 bit - salah07230 - 24-04-2014

بارك الله فيك اخي هذا ماكنت ابحث عنه
لكني لم استطع تطبيقه في برنامجي
ممكن تعديل على السورس وتحياتي لك
كود :
function Swap(A: Integer): Integer; asm {$IFDEF CPUX64} MOV EAX,ECX {$ENDIF !CPUX64} BSWAP EAX end; procedure TForm1.Button1Click(Sender: TObject); var j:tmemorystream; i:integer; p:byte; g1:string; begin if not OpenDialog1.Execute then exit; edit1.Text:=extractfilename(OpenDialog1.FileName); j:=tmemorystream.Create; j.LoadFromFile(OpenDialog1.FileName); g1:=''; for i:=$0 to 3 do begin j.Position:=i; j.Read(p,1); g1:=g1+inttohex(p,2); end; g1 := IntToHex(Swap(g1), 8); memo1.Text:=g1; end;
وشكرا لك


كيف اقوم بقلب string 32 bit - SMP3 - 24-04-2014

صحح السطر ما قبل الأخير بهذا السطر :
PHP كود :
g1 := inttohex(Swap(StrToInt(Trim(g1))), 8); 



كيف اقوم بقلب string 32 bit - salah07230 - 24-04-2014

للاسف لم يعمل معي هل من حل اخر


كيف اقوم بقلب string 32 bit - SMP3 - 25-04-2014

لم أنتبه الى أن g يحمل قيمة بالهكس ..
عدل السطر الى :

PHP كود :
g1 := inttohex(Swap(StrToInt('$'+g1)), 8); 



كيف اقوم بقلب string 32 bit - Agmcz - 25-04-2014

السلام عليكم

بعض التعديلات إنطلاقا من الاجراء الذي وضعته


PHP كود :
function Swap(A: Integer): Integer;
asm
  
{$IFDEF CPUX64}
  
MOV EAX,ECX
  
{$ENDIF !CPUX64}
  
BSWAP EAX
end
;

procedure TForm1.Button1Click(Sender: TObject);
var
  
MS: TMemoryStream;
  
P: Integer;
  
FileSize: Integer;
  
Buffer: array of Byte;
  
sByte: string;
begin
  
if not OpenDialog1.Execute then
    
Exit;
  
Edit1.Text := ExtractFileName(OpenDialog1.FileName);
  
MS := TMemoryStream.Create;
  try
    
MS.LoadFromFile(OpenDialog1.FileName);
    
FileSize := MS.Size;
    
SetLength(Buffer, FileSize);
    
//MS.Position := 0; // B Position
    
MS.Read(Buffer[0], FileSize);
    for 
P := 0 to 3 do
    
begin
      sByte 
:= sByte + IntToHex(Buffer[P], 2);
    
end;
    
sByte := IntToHex(Swap(StrToInt('$' + sByte)), 8);
    
Memo1.Lines.Add(sByte);
  finally
    
MS.Free;
  
end;
end; 



كيف اقوم بقلب string 32 bit - Agmcz - 25-04-2014

أو من أول بايت إلى أخر بايت

PHP كود :
function Swap(A: Integer): Integer;
asm
  
{$IFDEF CPUX64}
  
MOV EAX,ECX
  
{$ENDIF !CPUX64}
  
BSWAP EAX
end
;

procedure TForm1.Button1Click(Sender: TObject);
var
  
MS: TMemoryStream;
  
P, I: Integer;
  
FileSize: Integer;
  
Buffer: array of Byte;
  
sByte: string;
begin
  
if not OpenDialog1.Execute then
    
Exit;
  
Edit1.Text := ExtractFileName(OpenDialog1.FileName);
  
MS := TMemoryStream.Create;
  try
    
MS.LoadFromFile(OpenDialog1.FileName);
    
FileSize := MS.Size;
    
SetLength(Buffer, FileSize);
    
//MS.Position := 0; // B Position
    
MS.Read(Buffer[0], FileSize);
    
I := 0;
    for 
P := 0 to Pred(FileSize) do
    
begin
      Inc
(I);
      
sByte := sByte + IntToHex(Buffer[P], 2);
      if 
I mod 4 = 0 then
      begin
       sByte 
:= IntToHex(Swap(StrToInt('$' + sByte)), 8);
       
Memo1.Lines.Add(sByte);
       
sByte := '';
      
end;
    
end;
  finally
    
MS.Free;
  
end;
end; 

بالتوفيق


كيف اقوم بقلب string 32 bit - salah07230 - 25-04-2014

بارك الله فيكما اخواي SMP3 و ghost-dz على هذه الرد لقد تم حل المشكل
حقيقة المنتدى رائع جدا وتعلمت منه الكثير
الف شكر مرة اخرى لكم