📄 xnumber.pas
字号:
unit xNumber;
//16进制,2进制,整数,字符串间的转换。
interface
uses sysutils, dialogs;
//------------------------------------------------------------------//
function IntToHexStr(Value:Integer): string;
function HexStrToInt(HexStr:string): Integer;
function HexToBinStr(HexStr : string): string;
function BinStrToInt(BinStr : string) : integer;
function IntToBinStr(Value: Integer): String;
function HexCharToInt(HexToken : char):Integer;
function HexCharToBinStr(HexToken : char): string;
//------------------------------------------------------------------//
function IsBitSet(const x:Integer; const bit:byte): boolean;
function ClearBit(const x: Integer; const bit: Byte):Integer;
function SetBit(const x: Integer; const bit: Byte): Integer;
function ToggleBit(const x: Integer; const bit: Byte):Integer;
function SetAllBits (const x: Integer):Integer;
function ClearAllBits (const x: Integer):Integer;
function ToggleAllBits (const x: Integer):Integer;
implementation
//------------------------------------------------------------------//
//整数幂,内部使用
function interior_power(base, power: integer): integer;
var
counter : integer;
begin
Result:=1;
for counter:=1 to power do Result:=Result*base;
end;
//------------------------------------------------------------------//
//整数转换为16进制字符串
function IntToHexStr(Value:Integer): string;
begin
Result := Format('%0x', [Value] );
end;
//------------------------------------------------------------------//
//16进制字符串转换为整数
function HexStrToInt(HexStr:string): Integer;
begin
if HexStr[1]<>'$' then HexStr:='$'+HexStr;
Result :=StrToInt(HexStr);
end;
//------------------------------------------------------------------//
//16进制字符串转换为2进制字符串
function HexToBinStr(HexStr : string): string;
var
Counter : integer;
begin
Result:='';
for Counter:=1 to length(HexStr) do
Result:=Result+HexCharToBinStr(HexStr[Counter]);
end;
//------------------------------------------------------------------//
//16位2进制字符串转换为整数
function BinStrToInt(BinStr : string) : integer;
var
counter : integer;
begin
if length(BinStr)>16 then
raise ERangeError.Create(#13+BinStr+#13+'不在16位二进制数有效范围内。'+#13);
Result:=0;
for counter:=1 to length(BinStr) do
if BinStr[Counter]='1' then
Result:=Result+interior_power(2,length(BinStr)-counter);
end;
//------------------------------------------------------------------//
//整数转换为2进制字符串
function IntToBinStr(Value: Integer): String;
var
i: Integer;
begin
Result:='';
for i:=SizeOf(Integer) downto 0 do
begin
if Value and (1 shl i)<>0 then
Result:=Result+'1'
else
Result:=Result+'0';
end;
end;
//------------------------------------------------------------------//
//16进制字符(0..9 & A..F or a..f)转换为整数
function HexCharToInt(HexToken : char):Integer;
begin
{if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
{ use lowercase aswell }
Result:=0;
if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
Result:=Ord(HexToken)-65 + 10;
end;
//------------------------------------------------------------------//
//16进制字符转换为2进制字符串
function HexCharToBinStr(HexToken : char): string;
var
DivLeft : integer;
begin
DivLeft:=HexCharToInt(HexToken); { first HEX->BIN }
Result:='';
{ Use reverse dividing }
repeat { Trick; divide by 2 }
if odd(DivLeft) then { result = odd ? then bit = 1 }
Result:='1'+Result { result = even ? then bit = 0 }
else
Result:='0'+Result;
DivLeft:=DivLeft div 2; { keep dividing till 0 left and length = 4 }
until (DivLeft=0) and (length(Result)=4); { 1 token = nibble = 4 bits }
end;
//------------------------------------------------------------------//
//指定位是否为1
function IsBitSet(const x:Integer; const bit:byte): boolean;
begin
Result := (x and (1 shl bit)) <> 0;
end;
//------------------------------------------------------------------//
//所有位清0
function ClearAllBits (const x: Integer):Integer;
begin
Result:= $00000000;
end;
//------------------------------------------------------------------//
//所有位置1
function SetAllBits (const x: Integer):Integer;
begin
Result:= Integer($FFFFFFFF);
end;
//------------------------------------------------------------------//
//所有位翻转
function ToggleAllBits (const x: Integer):Integer;
begin
Result:= x xor Integer($FFFFFFFF);
end;
//------------------------------------------------------------------//
//指定位清0
function ClearBit(const x: Integer; const bit: Byte):Integer;
begin
// Result:= x and (not (Integer (1) shl bit));
Result:= x and ((1 shl bit) xor $FFFFFFFF);
end;
//------------------------------------------------------------------//
//指定位置1
function SetBit(const x: Integer; const bit: Byte):Integer;
begin
Result := x or (1 shl bit);
end;
//------------------------------------------------------------------//
//指定位反转
function ToggleBit(const x: Integer; const bit: Byte):Integer;
begin
Result:= x xor (1 shl bit);
end;
//格式化整数
//var
// i:Integer;
// s:string;
//begin
// i := 1200000;
// s := FormatFloat('#,0', i);
// Memo1.lines.add(s);
//end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -