การแปลงทั่วไปภายใต้ Delphi
ผู้แต่ง:lyboy99
อีเมล์:[email protected]
URL: http://hnh.126.com
จัดเตรียมวิธีการแปลงที่ใช้กันทั่วไปหลายวิธีและฟังก์ชันการแปลง
หวังว่ามันจะช่วยคุณได้
1.HEX -> จำนวนเต็ม
2.2.ธ.ค. ถึง HEX
3.ASCII ถึง HEX/คณิตศาสตร์
4.ไบนารีเป็นทศนิยม
================================================== ============
1.HEX -> จำนวนเต็ม
================================================== ============
วิธีที่ 1
-------------------------------------------------- -------------------------------------------------- ----------------------------------
var
ฉัน : จำนวนเต็ม
s : สตริง;
เริ่ม
s := '$' + ThatHexString;
ฉัน := StrToInt(a);
จบ;
-------------------------------------------------- -------------------------------------------------- ----------------------------------
วิธีที่ 2
-------------------------------------------------- -------------------------------------------------- ----------------------------------
CONST HEX : ARRAY['A'..'F'] ของจำนวนเต็ม = (10,11,12,13,14,15);
VAR str : สตริง;
อินท์,
ฉัน : จำนวนเต็ม;
เริ่ม
READLN(str);
อินท์ := 0;
สำหรับ i := 1 ถึง ความยาว(str) DO
ถ้า str[i] < 'A' แล้ว Int := Int * 16 + ORD(str[i]) - 48
อื่น Int := Int * 16 + HEX[str[i]];
เขียน(Int);
อ่านข้อมูล;
จบ.
================================================== =
2.ธันวาคม ถึง HEX
-
HexString := Format('%0x',DecValue);
-
================================================== ==
3.ASCII ถึง HEX/คณิตศาสตร์
-
หน่วย Hexstr;
อินเตอร์เฟซ
ใช้ String16, SysUtils;
พิมพ์
PByte = ^ไบต์;
PROcedure BytesToHexStr (var hHexStr: String; pbyteArray: PByte; InputLength: Word);
ขั้นตอน HexStrToBytes (hHexStr: String; pbyteArray: ตัวชี้);
ขั้นตอน HexBytesToChar (การตอบสนอง var: String; hexbytes: PChar; InputLength: WORD);
การดำเนินการ
ขั้นตอน BytesToHexStr (var hHexStr: String; pbyteArray: PByte; InputLength: WORD);
คอนสตรัคชั่น
HexChars : อาร์เรย์[0..15] ของ Char = '0123456789ABCDEF';
var
ฉัน, เจ: คำ;
เริ่ม
SetLength(hHexStr, (ความยาวอินพุต * 2));
FillChar(hHexStr, ขนาดของ(hHexStr), #0);
เจ := 1;
สำหรับ i := 1 ถึง InputLength จะเริ่มต้น
hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
hHexStr[j] := Char(HexChars[pbyteArray^ และ 15]); inc(j);
inc(pbyteArray);
จบ;
จบ;
ขั้นตอน HexBytesToChar (การตอบสนอง var: String; hexbytes: PChar; InputLength: WORD);
var
ฉัน: คำ;
ค: ไบต์;
เริ่ม
SetLength (การตอบสนอง, ความยาวอินพุต);
FillChar(การตอบสนอง, SizeOf(การตอบสนอง), #0);
สำหรับ i := 0 ถึง (InputLength - 1) จะเริ่มต้น
c := BYTE(hexbytes[i]) และ BYTE($f);
ถ้า c > 9 แล้ว
Inc(c, $37)
อื่น
Inc(c, $30);
การตอบสนอง [i + 1] := ถ่าน (c);
สิ้นสุด;{สำหรับ}
จบ;
ขั้นตอน HexStrToBytes (hHexStr: String; pbyteArray: ตัวชี้);
{pbyteArray ต้องชี้ไปที่หน่วยความจำเพียงพอที่จะเก็บเอาต์พุต}
var
ฉัน, เจ: คำ;
tempPPTr: PChar;
twoDigits: สตริง[2];
เริ่ม
tempPtr := pbyteArray;
เจ := 1;
สำหรับ i := 1 ถึง (Length(hHexStr) DIV 2) จะเริ่มต้นขึ้น
twoDigits := คัดลอก(hHexStr, j, 2); Inc(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);
เริ่ม
ถ้า Len > 255 แล้ว
ส[0] := Chr(255)
อื่น
S[0] := Chr(เลน)
จบ;
ขั้นตอน SetString (var Dst: string; Src: PChar; Len: Integer);
เริ่ม
ถ้า Len > 255 แล้ว
ย้าย(Src^, Dst[1], 255)
อื่น
ย้าย(Src^, Dst[1], Len);
SetLength(Dst, Len);
จบ;
{$ENDIF}
จบ.
================================================== ===============
4.ไบนารีเป็นทศนิยม
-------------------------------------------------- -------------------------------------------------- ---------------
-
// แปลง 32 บิต base2 เป็น 32 บิต base10 //
// จำนวนสูงสุด = 99 999 999 ให้คืนค่า -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
mov ecx,8 // 8 แทะ (10^8-1)
@2:
mov edx,0 // ล้างส่วนที่เหลือ
div ebx // eax DIV 10, edx mod 10
เพิ่ม esi,edx // result = result + ส่วนที่เหลือ[I]
ror esi,4 // shift nibble
loop@2 // วนซ้ำทั้ง 8 แทะ
mov eax,esi // ผลลัพธ์ของฟังก์ชัน
pop esi // คืนค่าการลงทะเบียน
ป๊อป ebx
@ทางออก:
จบ;
-------------------------------------------------- -------------------------------------------------- ----------------------------------
วิธีที่ 2
[โอลิเวอร์ ทาวน์เซนด์, [email protected]]
-------------------------------------------------- -------------------------------------------------- ----------------------------------
ฟังก์ชัน IntToBin (ค่า: LongInt; ขนาด: จำนวนเต็ม): สตริง;
var
ฉัน: จำนวนเต็ม;
เริ่ม
ผลลัพธ์:=';
สำหรับ i:=ขนาดลงเหลือ 0 จะเริ่มต้น
ถ้า Value และ (1 shl i)<>0 ให้เริ่มต้น
ผลลัพธ์:=ผลลัพธ์+'1';
สิ้นสุดอย่างอื่นเริ่มต้น
ผลลัพธ์:=ผลลัพธ์+'0';
จบ;
จบ;
จบ;
ฟังก์ชั่น BinToInt (ค่า: สตริง): LongInt;
var
ฉัน, ขนาด: จำนวนเต็ม;
เริ่ม
ผลลัพธ์:=0;
ขนาด:=ความยาว(มูลค่า);
สำหรับ i:=ขนาดลงเหลือ 0 จะเริ่มต้น
ถ้า Copy(Value,i,1)='1' ให้เริ่มต้น
ผลลัพธ์:=ผลลัพธ์+(1 shl i);
จบ;
จบ;
จบ;
================================================== =========================