Delphi 进制转换,二进制,八进制,十进制,十六进制
unit Unit2;
interface
uses
SysUtils,Math;
type
TConversion = class
public
//10 进制 to 2,8,16 进制
function inttoBitStr(intstr: string): string;
function IntToHexStr(intStr: string): String;//10 = 2
function IntToOStr(intstr : string): string;//?????
//2进制 to 10,8,16 进制
function BittoInt(BitStr:  String):  LongInt;// 2 = 10
function BitStrToHextStr(const  BitStr  :  String)  :  String;//2 = 16
function BitStrToOStr(const  BitStr  :  String)  :  String;//2 = 8
//16 > 10 2  8 进制
function HextoIntStr(HexStr: String): string;
function HexToBitStr(HexStr:  string): string;
function HexToOStr(HexStr:  string): string;
//八进制转换成二进制字符串
function OtoBitStr(O : string):string;
function OtoIntStr(O : string):string;
function OtoHexStr(O : string):string;
end;
var
TC :TConversion;
implementation
{ TConversion }
//2 进制 to 10 进制
function TConversion.BittoInt(BitStr: String): LongInt;
var
i,Size:  Integer;
begin
Result:=0;
Size:=Length(BitStr);
for  i:=Size  downto  1  do
begin
//例如 1010
if Copy(BitStr,i,1)='1'  then
Result:=Result+(1  shl  (Size-i));
end;
//第二种方法
//二进制转换为十进制 start
{
VAR
str : String;
Int : Integer;
i : integer;
Str := UpperCase(Edit1.Text);
Int := 0;
FOR i := 1 TO Length(str) DO
Int := Int * 2 + ORD(str[i]) - 48;
Edit2.Text:=IntToStr(int);
}
/
/二进制转换为十进制 end;
//第三中方法
{
function hextoint(s: string): Double;
begin
while Length(s) <>0 do
begin              //2^(长度-1)次方
if s[1]='1' then Result:=Result+power(2,Length(s)-1);
s:=Copy(s,2,Length(s));
end
end;
}
end;
function TConversion.BitStrToHextStr(const BitStr: String): String;
var
vD : Byte;
I : Integer;
vHextStr : String;
vP : PChar;
vLen : Integer;
begin
vLen := Length(BitStr);
if vLen mod 4 > 0 then
begin
SetLength(vHextStr,  vLen  div  4  +  1);
vLen := vlen div 4 + 1;
end
else
begin
SetLength(vHextStr,  vLen  div  4);
vLen := vlen div 4 ;
end;
//初始化
vD := 0;
vP := PChar(BitStr)+length(BitStr)-1;
I := 0;  //开始计数
while vP^ <> #0 do
begin
if vp^ = '1' then
begin
case i of
0:      vD :=vd+1;
1:      vD :=vd+2;
2:      vD :=vd+4;
3:      vD :=vd+8;
end;
end;
Dec(vP);
Inc(I);
if I = 4 then
begin
case vD of
0..9 : vHextStr[vLen] := Chr(vD + $30);
10..15 : vHextStr[vLen] := Chr(vD - 10 + $41);
end;
Dec(vLen);
I  :=  0;
vD  :=  0;
end;
end;
if I > 0then
begin
case  vD  of
16进制字符串转16进制数组0..9 : vHextStr[vLen] := Chr(vD + $30);
10..15 : vHextStr[vLen] :=
Chr(vD + $41);
end;
end;
Result := vHextStr;
end;
function TConversion.BitStrToOStr(const BitStr: String): String;
var
vD : Byte;
I : Integer;
vHextStr : String;
vP : PChar;
vLen : Integer;
begin
vLen := Length(BitStr);
if vLen mod 3 > 0 then
begin
SetLength(vHextStr,  vLen  div  3  +  1);
vLen := vlen div 3 + 1;
end
else
begin
SetLength(vHextStr,  vLen  div  3);
vLen := vlen div 3 ;
end;
//初始化
vD := 0;
vP := PChar(BitStr)+length(BitStr)-1;
I := 0;  //开始计数
while vP^ <> #0 do
begin
if vp^ = '1' then
begin
case i of
0:      vD :=vd+1;
1:      vD :=vd+2;
2:      vD :=vd+4;
end;
end;
Dec(vP);
Inc(I);
if I = 3 then
begin
case vD of
0..9 : vHextStr[vLen] := Chr(vD + $30);
end;
Dec(vLen);
I  :=  0;
vD  :=  0;
end;
end;
if I > 0then
begin
case  vD  of
0..9 : vHextStr[vLen] := Chr(vD + $30);
end;
end;
Result := vHextStr;
end;
function TConversion.HexToBitStr(HexStr: string): string;
const
cBitStrings:  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
Result  :=  '';
for  I  :=  1  to  Length(HexStr)  do
Result  :=  Result  +  cBitStrings[StrToIntDef('$'  +  HexStr[I],  0)];
while  Pos('0',  Result)  =  1  do  Delete(Result,  1,  1);
end;  {  HexToBit  }
function TConversion.HextoIntStr(HexStr: String): string;
begin
result:= IntToStr(StrToInt('$' + (HexStr)));
end;
function TConversion.HexToOStr(HexStr: string): string;
begin
Result := BitStrToOStr(HexToBitStr(HexStr));
end;
function TConversion.inttoBitStr(intstr: string): string;
var
i :Integer;
begin
i := StrToInt(intstr);
while i <>0 do
begin              //i mod 2取模,再使用format格式化
result:=Format('%d'+result,[i mod 2]);
i:=i div 2
end
end;
//10进制装换 2进制 第二种方法
{function TConversion.IntToBitStr(Value, 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;}
function TConversion.IntToHexStr(intStr: string): String;
begin
Result:=inttoBitStr(intstr);
end;
function TConversion.IntToOStr(intstr: string): string;
begin
Result := BitStrToHextStr(inttoBitStr(intstr));
end;
function TConversion.OtoBitStr(O: string): string;
const
cBitStrings:  array[0..7]  of  string  =
(
'000',  '001',  '010',  '011',
'100',  '101',  '110',  '111'
)
var
i,j:  Integer;
begin
Result  :=  '';
for  I  :=  1  to  Length(o)  do
begin
j:=strtoint(o[i]);
Result  :=  Result
+  cBitStrings[j];
end;
while  Pos('0',  Result)  =  1  do  Delete(Result,  1,  1);
end;
function TConversion.OtoHexStr(O: string): string;
begin
Result :=BitStrToHextStr(OtoBitStr(o));
end;
function TConversion.OtoIntStr(O: string): string;
begin
Result := OToIntStr(OtoBitStr(o));
end;
end.
/
/=======================================================================================================
function OcttoBin(i: integer): string; //十进制转换为二进制字符串
var
j: integer;
s: string;
begin
j := i;
s := ' ';
while j >= 2 do
begin
if (j mod 2) = 1 then
begin
s := '1' + s;
j := j div 2;
end
else
begin
s := '0' + s;
j := j div 2;
end;
end;
s := chr(ord('0') + j) + s;
result := s;
end;
function BintoOct(k: string): integer; //二进制字符串转换为十进制
var
i, j, t: integer;
s: char;
begin
t := 1;
j := length(k);
j := 0 + (ord(k[j]) - ord('0')) * t;
;
for i := length(k) - 1 downto 1 do
begin
s := k[i];
t := t * 2;
j := j + ((ord(s) - ord('0')) * t);
end;
result := j;
end;
function OcttoHex(i: integer): string; //十进制转换为四位的十六进制字符串
begin
result := InttoHex(i, 4);
end;
function HextoOct(k: string): integer; //十六进制字符串转换为十进制数
begin
result := StrtoInt('$' + k);
end;
function HextoBin(k: string): string;  //十六进制字符串转换为二进制字符串
begin
result := OcttoBin(HextoOct(k));
end;
function BintoHex(k: string): string;  //二进制字符串转换为四位的十六进制字符串
begin
result := Octtohex(BintoOct(k));
end;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。