1.16 TO 10
********************************************************
16转10,否则输出-1
function Hex(c: char): Integer;
var
x: Integer;
begin
if ( Ord(c)>= Ord('0')) and (Ord(c) <= Ord('9')) then
x:= Ord(c) - Ord('0')
else if (Ord(c) >= Ord('a')) and (Ord(c) <= Ord('f')) then
x:= Ord(c) - Ord('a') + 10
else if (Ord(c) >= Ord('A')) and (Ord(c) <= Ord('F')) then
x:= Ord(c) - Ord('A') + 10
else
x:= -1; //输入错误
Result:= x;
end;
2.字符 TO 10
***************************************************************
该函数接收1~2个,字符转换成功后输出对应10进制数的值,否则输出-1
function HexToInt(Str: string): Integer;
var
tmpInt1, tmpInt2: Integer;
begin
if Length(Str) = 1 then
begin
Result:= Hex(Str[1]);
end
else if Length(Str) = 2 then
begin
tmpInt1:= Hex(Str[1]);
tmpInt2:= Hex(Str[2]);
if (tmpInt1 = -1) or (tmpInt2 = -1) then
Result:= -1
else
Result:= tmpInt1 * 16 + tmpInt2;
end
else
Result:= -1; //输入错误,转换失败
end;
3.字符串 TO ASCII码
*******************************************************************
字符串转换成ASCII码字符串
function StrToHexStr(const S: string): string;
var
i: Integer;
begin
for i:= 1 to Length(S) do
begin
if i = 1 then
Result:= IntToHex(Ord(S[1]), 2)
else
Result:= Result + ' ' + IntToHex(Ord(S[i]), 2);
end;
end;
4.字符串去掉所有空格
***********************************************************************
该函数去掉字符串中所有空格
function TrimAll(Str: string): string;
var
mLen, i: Integer;
begin
mLen:= Length(Str);
//初始化返回值
Result:= '';
for i:= 0 to mLen do
begin
//是空格就去掉
if Str[i] = '' then
Continue;
Result:= Result + Str[i];
end;
end;
5.10 TO 2
**************************************************
十进制转换成二进制字符串
function DTob(decimal:longint):string;
const symbols:string[16]='01';
var
scratch:string;
remainder:byte;
begin
repeat
remainder:=decimal mod 2;
scratch:=symbols[remainder+1]+scratch;
decimal:=decimal div 2;
until(decimal=0);
result:=scratch;
end;
6.10 TO16字符
**************************************************
1.十进制转换成十六进制字符串
function DToHex(decimal:longint):string;
const symbols:string[16]='0123456789abcdef';
var
scratch:string;
remainder:byte;
begin
repeat
remainder:=decimal mod 16;
scratch:=symbols[remainder+1]+scratch;
decimal:=decimal div 16;
until(decimal=0);
result:=scratch;
end;
2.十进制转十六进制字符
var HexArr: array[1..15]of string= ('1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
function Int2Hex(Value: Integer): string;
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;
if not Boolean(iTemp) then Result := Result + '00'
else
begin
Result := Result + HexArr[iTemp div 16];
Result := Result + HexArr[iTemp mod 16];
end;
Inc(i);
end;
end;
7.字符串 TO 16进制
*************************************************************************
Eidt1.Text:=StrToInt('$'+'0000FFFF'); //65535
2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
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
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.