delphi4arab منتديات دلفي للعرب

نسخة كاملة : توضيح خوارزمية الاكسور xor
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
ما هو كود الدلفي لعملية Xor اي ترجمة لى لغة الدلفى

خوارزمية الاكسور XOR ولاجرائها اد كان لدينا 2 Bits المتطابقين مختلفين 1 و 0 , النتيجة ستكون واحد 1
4B XOR 69 = XX
4B = 01001011
01101001 =69
22 = 00100010
لكي احصل على هده النتيجة
4B XOR 69 = 22
ودالك باستعمال edit3.text = edit1.tex? edit2.text
السلام عليكم
تفضل :
PHP كود :
function sHexToInt(Hex : String): Integer;
begin
  Result 
:= StrToInt(Format('$%S',[Hex]))
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  
num1,num2,num3 : Integer;
begin
  num1 
:= sHexToInt(Edit1.Text);
  
num2 := sHexToInt(Edit2.Text);
  
asm
    MOV eax
,num1
    
XOR eax,num2
    MOV num3
,eax
  end
;
  
Edit3.Text := IntToHex(num3,0)
end; 

السروس كود بالمرفقات
يمكنك استخدام المعامل XOR بشكل عادي
PHP كود :
N1:= StrToInt(Edit1.Text);
N2:= StrToInt(Edit2.Text);
NXor:= N1 XOR N2; 
almuhhnad كتب :السروس كود بالمرفقات
اخي عندما اعطيه رقم طويل لا يحوله متل 16 رقم و حرف
السلام عليكم ورحمة الله وبركاتة

إقتباس :اخي عندما اعطيه رقم طويل لا يحوله متل 16 رقم و حرف
نعم , وذلك يرجع لان القيمة التي ادخلتها اكبر من نوع الـ integer
ولتعامل مع قيم كبيرة نظع المتغير int64 بدلاً من integer
وهذا هو الكود :
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
  
num1,num2,num3 : Int64;
begin
  num1 
:= StrToInt64(Edit1.Text);
  
num2 := StrToInt64(Edit2.Text);
  
num3 := num1 xor num2;
  
Edit3.Text := IntToHex(num3,0)
end; 

وهذا نفس الكود لكن بسطر واحد Wink
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit3
.Text := IntToHex(StrToInt64(Edit1.Text) xor StrToInt64(Edit2.Text),0)
end; 

والسلام عليكم
اخي الكريم هذا الكود لم يعمل معي يعمل مع الاعداد فقط ولا يتعامل مع الحروف ممكن تعديل عليه
وبارك الله فيك
salah07230 كتب :
الكود لم يعمل معي يعمل مع الاعداد فقطولا يتعامل مع الحروف ممكن تعديل عليه
يجب تحويل الحروف الى بايتات ثم اجراء عملية ال xor :
PHP كود :
function XorStr(A, B: string): string;
var
  
LA, LB, i, j: integer;
  
cAB, cBB, cR: Byte;
begin
  LA 
:= length(A);
  
LB := length(B);
  
Result:='';
  if (
LA > 0) and (LB > 0) and (LA = LB) then
    begin
      SetLength
(Result, LA);
      for 
i := 1 to LA do
        
begin
          cAB 
:= Ord(A[i]);
          
cBB := Ord(B[i]);
          
cR := cAB xor cBB;
          if 
cR <> 0 then
            Result
[i] := char(cR);
        
end;
    
end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  Caption 
:= XorStr('Delphi', 'CSharp');
end; 
السلام عليكم
اخي الكريم شكرا لك على ردك
ولكني لم استطع تطبيق الدالة ممكن التعديل على المرفق
المشكلة أنك تملك قيم بالهكس أخي في ال Edit
و أنت استخدمت strtoint64 لتحويل القيمة النصية الى عدد ..
لكن لم تحدد ان كان العدد هكس
PHP كود :
num1 := strtoint64(Edit1.text);
  
num2 := strtoint64(Edit2.text); 

الأصح أن تكتب :
PHP كود :
num1 := strtoint64('$'+Edit1.text);
  
num2 := strtoint64('$'+Edit2.text); 
بارك الله فيك وجزاك خيرا
النتيجة كما يلي:
21BC350E xor 07 = 26BB3209
الصفحات : 1 2