D7wmleixiaofu/码表/U_HexFunction.pas
DESKTOP-E401PHE\Administrator c446a0860f ~
2025-04-30 16:04:42 +08:00

125 lines
2.5 KiB
ObjectPascal

unit U_HexFunction;
interface
uses
SysUtils,Windows,forms,Spcomm, shlobj,ExtCtrls;
function HexStrToStr(const S:string):string; // 十六进制转字符串
function StrToHexStr(const S:string):string;
function bintoint01(s: string): Double; //二进制转换十进制
function hextoint01(s: string): Integer; //十六进制转换十进制
Function intTobin01(Value :Integer): string; //十进制转换二进制
Function intTohex01(value :integer): string; //十进制转换十六进制
implementation
uses Math;
Function intTohex01(value :integer) : string;
begin
result:=uppercase(format('%x',[value]));
end;
//二进制字符转十进制
Function binToDec(Value :string) : string;//integer;
VAR
str : String;
Int : Integer;
i : integer;
BEGIN
Str := UpperCase(Value);
Int := 0;
FOR i := 1 TO Length(str) DO
Int := Int * 2+ ORD(str[i]) - 48;
Result := IntToStr(Int);
end;
//十进制转二进制 函数一
function mod_num(n1,n2:integer):integer;//取余数
begin
result:=n1-n1 div n2*n2
end;
//十进制转二进制 函数二
function reverse(s:String):String;//取反串
Var
i,num:Integer;
st:String;
begin
num:=Length(s);
st:='';
For i:=num DownTo 1 do
Begin
st:=st+s[i];
End;
Result:=st;
end;
//十进制转二进制
Function intTobin01(Value:Integer) : string;
Var
ST:String;
N:Integer;
Begin
ST:='';
n:=value;
While n>=2 Do
Begin
st:=st+IntToStr(mod_num(n,2));
n:=n div 2;
End;
st:=st+IntToStr(n);
Result:=reverse(st);
End;
function HexStrToStr(const S:string):string;
//16进制字符串转换成字符串
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin //xlh 2006.10.21
while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
inc(t);
if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
ts:='$'+S[t]
else
ts:='$'+S[t]+S[t+1];
Val(ts,M,Code);
if Code=0 then
Result:=Result+Chr(M);
inc(t,2);
end;
end;
function StrToHexStr(const S:string):string;
//字符串转换成16进制字符串
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;
//十六进制(S)-->>十进制(I)
function hextoint01(s: string): Integer;
begin //$代表16进制
Result:=StrToInt('$'+s);
end;
//二进制(S)-->>十进制(D) [重写:Jey]
function bintoint01(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.