Delphi進制轉換(二進制/十進制/十六進制) 2009-11-27 11:42:24| 分類: 計算機知識 | 標籤: |字號大中小 訂閱 .html
Delphi進制轉換(二進制/十進制/十六進制)函數
2008-08-29 10:24post
1、徹底用API完成:..uses Windows;htm
function IntToStr(I: integer): string;blog
beginstring
Str(I, Result);it
end;io
function StrToInt(S: string): integer;function
beginclass
Val(S, Result, Result);
end;
function HexToInt(Const HexValue: String) : Integer;
begin
Val('$'+HexValue, Result, Result);
end;
function IntToHex(Const Value: Integer): string;
const
HexChars: array[0..15] of Char = '0123456789ABCDEF';
var
iTemp: Integer;
i: Integer;
begin
Result := '';
i := 0;
while i<4 do
begin
case i of
0: iTemp := Value shr 24 and $FF;
1: iTemp := Value shr 16 and $FF;
2: iTemp := Value shr 8 and $FF;
3: iTemp := Value and $FF;
end;
Result := Result + HexChars[iTemp div 16];
Result := Result + HexChars[iTemp mod 16];
Inc(i);
end;
end;
function LowerCase(const S: string): String;
begin
Result:=CharLower(Pchar(S));
end;
function UpperCase(const S: string): String;
begin
Result:=CharUpper(Pchar(S));
end;
2、函數實現
//十進制 to 二進制
function IntToBin(Value: LongInt;Size: Integer): String;
var
i: Integer;
begin
Result:='';
for i:=Size-1 downto 0 do begin
if Value and (1 shl i)<>0 then begin
Result:=Result+'1';
end else begin
Result:=Result+'0';
end;
end;
end;
//二進制 to 十進制
function BintoInt(Value: String): LongInt;
var
i,Size: Integer;
begin
Result:=0;
Size:=Length(Value);
for i:=Size downto 1 do
begin
if Copy(Value,i,1)='1' then
Result:=Result+(1 shl (Size-i));
end;
end;
function floatBintoInt(Value: String): real;
var
i,Size: Integer;
begin
Result:=0;
Size:=Length(Value);
for i:=Size downto 1 do
begin
if Copy(Value,i,1)='1' then
Result:=Result+1/(1 shl i);
end;
end;
//十六進制 to 二進制
function HextoBinary(Hex:string):string;
const
BOX: array [0..15] of string =
('0000','0001','0010','0011',
'0100','0101','0110','0111',
'1000','1001','1010','1011',
'1100','1101','1110','1111');
var
i:integer;
begin
for i:=Length(Hex) downto 1 do
Result:=BOX[StrToInt('$'+Hex[i])]+Result;
end;
//十六進制 to 十進制 浮點型
function HextoFloat(s:string):real;
var b,temp:string;
e:integer;
f:real;
begin
b:=HextoBinary(s);
temp := copy(b,2,8);
e:=BintoInt(temp)-127;
temp := copy(b,10,23);
f := 1+floatBintoInt(temp);
if(copy(b,1,1)='0')then
result := power(2,e)*f
else
result :=-power(2,e)*f;
end;