### 无限进制转换

(*//

//*)

///////Begin Source

const

cScaleChar = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function IntPower(Base, Exponent: Integer): Integer; {  返回 Base 的 Exponent 次方  }

var

I: Integer;

begin

Result := 1;

for I := 1 to Exponent do

Result := Result * Base;

end; { IntPower }

function IntToDigit(mNumber: Integer; mScale: Byte;

mLength: Integer = 0): string;

{  返回整数的进制表示 ;mScale 指定多少进制 ;mLength 指定长度 ,长度不足时向前补 0 }

var

I, J: Integer;

begin

Result := '';

I := mNumber;

while (I >= mScale) and (mScale > 1) do begin

J := I mod mScale;

I := I div mScale;

Result := cScaleChar[J + 1] + Result;

end;

Result := cScaleChar[I + 1] + Result;

for I := 1 to mLength - Length(Result) do Result := '0' + Result;

end; { IntToDigit }

function DigitToInt(mDigit: string; mScale: Byte): Integer;

{  返回进制表示转换成整数 ;mScale 指定多少进制  }

var

I: Byte;

L: Integer;

begin

Result := 0;

mDigit := UpperCase(mDigit);

L := Length(mDigit);

for I := 1 to L do

Result := Result + (Pos(mDigit[L - I + 1], cScaleChar) - 1) *

IntPower(mScale, I - 1);

end; { DigitToInt }

///////End Source

///////Begin Demo

procedure TForm1.Button1Click(Sender: TObject);

begin

Edit1.Text := IntToDigit(StrToIntDef(Edit2.Text, 0), 16);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

Edit2.Text := IntToStr(DigitToInt(Edit1.Text, 16));

end;

///////End Demo

0 0