كيف اقوم بقلب string 32 bit
#1
السلام عليكم

كيف اقوم بقلب string 32 bit مثلا هذه القيمة 3FAB2000وتصبح 0020AB3F
وشكرا لكم
الرد
#2
و عليكم السلام .
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 
Open Your Source .. Open Your Mind
الرد
#3
بارك الله فيك اخي هذا ماكنت ابحث عنه
لكني لم استطع تطبيقه في برنامجي
ممكن تعديل على السورس وتحياتي لك
كود :
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;
وشكرا لك
الرد
#4
صحح السطر ما قبل الأخير بهذا السطر :
PHP كود :
g1 := inttohex(Swap(StrToInt(Trim(g1))), 8); 
Open Your Source .. Open Your Mind
الرد
#5
للاسف لم يعمل معي هل من حل اخر
الرد
#6
لم أنتبه الى أن g يحمل قيمة بالهكس ..
عدل السطر الى :

PHP كود :
g1 := inttohex(Swap(StrToInt('$'+g1)), 8); 
Open Your Source .. Open Your Mind
الرد
#7
السلام عليكم

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


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; 
سبحان الله وبحمده سبحان الله العظيم
الرد
#8
أو من أول بايت إلى أخر بايت

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; 

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


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم