التحويلات الشائعة في دلفي
المؤلف:lyboy99
البريد الإلكتروني: [email protected]
رابط: http://hnh.126.com
تزويدك بالعديد من طرق التحويل شائعة الاستخدام ووظائف التحويل الخاصة بها
نأمل أن يساعدك
1.HEX -> عدد صحيح
2.2.ديسمبر إلى HEX
3.ASCII إلى HEX/math
4. ثنائي إلى عشري
================================================================================================== ============
1.HEX -> عدد صحيح
================================================================================================== ============
الطريقة.1
-------------------------------------------------- ----------------------------------
فار
أنا: عدد صحيح
الصورة: سلسلة؛
يبدأ
s := '$' + ThatHexString;
i := StrToInt(a);
نهاية؛
-------------------------------------------------- ----------------------------------
الطريقة2
-------------------------------------------------- ----------------------------------
CONST HEX : صفيف['A'..'F'] من عدد صحيح = (10,11,12,13,14,15);
سلسلة VAR : سلسلة؛
كثافة العمليات،
أنا: عدد صحيح؛
يبدأ
READLN(str);
إنت := 0;
FOR i := 1 TO Length(str) DO
إذا كانت str[i] < 'A' ثم Int := Int * 16 + ORD(str[i]) - 48
ELSE Int := Int * 16 + HEX[str[i]];
WRITELN(Int);
ريدلن؛
نهاية.
================================================================================================== =
2. ديسمبر إلى HEX
-----------------------------------------------
HexString := Format('%0x',DecValue);
-----------------------------------------------
================================================================================================== ==
3.ASCII إلى HEX/math
--------------------------
وحدة هيكستر؛
واجهة
يستخدم String16، SysUtils؛
يكتب
بايت = ^ بايت؛
PROcedure BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: Word);
الإجراء HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
الإجراء HexBytesToChar(استجابة var: String; hexbytes: PChar; InputLength: WORD);
تطبيق
الإجراء BytesToHexStr(var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
ثابت
HexChars : Array[0..15] of Char = '0123456789ABCDEF';
فار
ط، ي: كلمة؛
يبدأ
SetLength(hHexStr, (InputLength * 2));
fillChar(hHexStr, sizeof(hHexStr), #0);
ي := 1;
لأني := 1 إلى InputLength لا تبدأ
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ and 15]);
المؤتمر الوطني العراقي(pbyteArray);
نهاية؛
نهاية؛
الإجراء HexBytesToChar(استجابة var: String; hexbytes: PChar; InputLength: WORD);
فار
أنا: كلمة؛
ج: بايت؛
يبدأ
SetLength(Response, InputLength);
fillChar(Response, SizeOf(Response), #0);
لأنني := 0 إلى (InputLength - 1) تبدأ
c := BYTE(hexbytes[i]) و BYTE($f);
إذا ج> 9 ثم
شركة (ج، 37 دولارًا)
آخر
شركة (ج، 30 دولارًا)؛
الاستجابة[i + 1] := char(c);
النهاية؛ {ل}
نهاية؛
الإجراء HexStrToBytes(hHexStr: String; pbyteArray: Pointer);
{يجب أن يشير pbyteArray إلى ذاكرة كافية لاستيعاب الإخراج}
فار
ط، ي: كلمة؛
temPPTr: PChar;
رقمان: سلسلة[2];
يبدأ
tempPtr := pbyteArray;
ي := 1;
لأني := 1 إلى (Length(hHexStr) DIV 2) تبدأ
twoDigits := Copy(hHexStr, j, 2);
PByte(tempPtr)^ := StrToInt('$' + twoDigits Inc(tempPtr);
النهاية؛ {ل}
نهاية؛
نهاية.
-------------------------------------------------- ----------------------------------
-------------------------------------------------- ----------------------------------
سلسلة الوحدة16.
واجهة
{$IFNDEF Win32}
الإجراء SetLength(var S: string; Len: Integer);
الإجراء SetString(var Dst: string; Src: PChar; Len: Integer);
{$ENDIF}
تطبيق
{$IFNDEF Win32}
الإجراء SetLength(var S: string; Len: Integer);
يبدأ
إذا لين> 255 ثم
S[0]:= مركز حقوق الإنسان(255)
آخر
S[0] := مركز حقوق الإنسان(لين)
نهاية؛
الإجراء SetString(var Dst: string; Src: PChar; Len: Integer);
يبدأ
إذا لين> 255 ثم
نقل (Src^، Dst[1]، 255)
آخر
Move(Src^, Dst[1], Len);
SetLength(Dst, Len);
نهاية؛
{$ENDIF}
نهاية.
================================================================================================== ==============
4. ثنائي إلى عشري
-------------------------------------------------- ---------------
////////////////////////////////////////////////////////////////// /
// تحويل 32 بت base2 إلى 32 بت base10 //
// العدد الأقصى = 99999999، يُعاد -1 إذا كان أكثر //
////////////////////////////////////////////////////////////////// /
الدالة Base10(Base2:Integer): عدد صحيح؛
asm
cmp eax,100000000 // التحقق من الحد الأعلى
جي بي @1 // حسنًا
mov eax,-1 // علامة خطأ
jmp @exit // الخروج بـ -1
@1:
دفع ebx // حفظ السجلات
ادفع إيسي
xor esi,esi // النتيجة = 0
mov ebx,10 // قاعدة المحول 10
موف ecx,8 // 8 يقضم (10^8-1)
@2:
mov edx,0 // مسح الباقي
div ebx // eax DIV 10، edx mod 10
أضف esi,edx // النتيجة = النتيجة + الباقي [I]
ror esi,4 // التحول عاب
حلقة @ 2 // حلقة لجميع القضمات الثمانية
mov eax,esi // نتيجة الوظيفة
البوب esi // استعادة السجلات
البوب إبكس
@مخرج:
نهاية؛
-------------------------------------------------- ----------------------------------
الطريقة2
[أوليفر تاونسند، [email protected]]
-------------------------------------------------- ----------------------------------
وظيفة IntToBin (القيمة: LongInt؛ الحجم: عدد صحيح): سلسلة؛
فار
ط: عدد صحيح؛
يبدأ
النتيجة:=';
لأني:=الحجم يصل إلى 0 يبدأ
إذا كانت القيمة و (1 shl i)<>0 ثم ابدأ
النتيجة:=النتيجة+'1';
نهاية أخرى تبدأ
النتيجة:=النتيجة+'0';
نهاية؛
نهاية؛
نهاية؛
دالة BinToInt(القيمة: سلسلة): LongInt;
فار
أنا، الحجم: عدد صحيح؛
يبدأ
النتيجة:=0;
الحجم: = الطول (القيمة)؛
لأني:=الحجم يصل إلى 0 يبدأ
إذا Copy(Value,i,1)='1' ثم ابدأ
النتيجة:=Result+(1 shl i);
نهاية؛
نهاية؛
نهاية؛
================================================================================================== ===================================================