السلام عليكم ورحمة الله وبركته
اريد قلب قيمة في edit
مثال
عندي قيمة 11AB22 اريد دالة او كود لقلب القمة لتصبح
22AB11
وشكرا لكم
وعليك السلام ورحمة الله تعالى وبركاته
كود :
Function InverseStr(sDep : string) : string;
var
sFin : string;
i : integer;
begin
sFin:= '';
for i:= length(sDep) downto 1 do
begin
sFin:= sFin + copy(sDep, i,1);
end;
result:= sFin;
end;
هذا الكود يقلب النص فقط ,,,المشكلة هنا هي القلب من little endian الي big endian او العكس التحويل يتم عبر 2 او 4 بيت و ليس 3 كما نرى في المثال 11AB22 الا بفتراض ان هناك بيت اخير يساوي 0 و لم يتم اظهاره 0011AB22 في هذه الحالة يصبح العدد عند القلب 22AB1100 هذا هو المرجح ,,لقلب 2 بيت استتعمل swap اما لقلب 4 بيت استعمل الدالة
كود :
function SwapEndian(Value:integer):integer;
asm
bswap eax
end;
تجربة
كود :
Edit1.Text := IntToHex(SwapEndian(StrToint('$'+Edit1.Text)));
شكر لكم
بالنسبة لكود الاخ larbiparadox يعمل عملية swap
اما كود لاخ Ndagor يعمل InverseStr
شكرا لكم جزيرا
ركز جيدا
الدالة InverseStr تعطي قيمة خاطئة 22BA11 كما ان هذه الدالة ReverseString موجودة ولست في حاجة لكتابتها في الدالفي StrUtils
(18-01-2023, 03:16 PM)Ndagor كتب : [ -> ]ركز جيدا
الدالة InverseStr تعطي قيمة خاطئة 22BA11 كما ان هذه الدالة ReverseString موجودة ولست في حاجة لكتابتها في الدالفي StrUtils
إذا طول النص 6 حروف ثابت يمكن كتابتها هكذا
كود :
Function RevStr(MTxt : string) : string;
begin
result:= MTxt[6] + MTxt[5] + MTxt[3] + MTxt[4] + MTxt[2] + MTxt[1] ;
end;