⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xnumber.pas

📁 我自己用的Delphi函数单元 具体说明见打包文件的HELP目录下面
💻 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 + -