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

📄 functionunit.~pas

📁 求是科技出版的《Delphi串口通信工程开发实例导航》所有的源代码。是一本很好的书。拿出来与大家共享。
💻 ~PAS
字号:
unit FunctionUnit;

interface
var
    Port: string;
    Speed: string;
    DataBit:string;
    CheckBit:string;
    StopBit:string;


function CalMoneyCheck(BA : array of byte;ALow,AHigh:smallint):Byte;
function CalCheck(BA : array of byte;ALow,AHigh:smallint):Byte;
function Encrypt(AByte: byte):byte;
function AntiEncrypt(AByte: byte):byte;
function IsArrayValid(AByteAry : array of byte):Boolean;

function ComStrToInt(AComStr:string):smallint;
function EncryptStr(AStr:string):string;
implementation
uses
    Sysutils;

//计算金钱校验位
function CalMoneyCheck(BA : array of byte;ALow,AHigh:smallint):Byte;
var
    i:smallint;
    mTotal:integer;
begin
    mTotal := $13;
    for i:=ALow to AHigh do
    begin
        mTotal := mTotal + BA[i];
    end;
    Result := mTotal mod $ff;
end;


procedure Ept(var BA: array of byte);
var
    i:smallint;
    mTmp:byte;
begin
    //断言数据位数
    Assert(Length(BA)=8,'The Length is NOT Correct!');
    mTmp := $2a;
    for i:=5 downto 1 do
    begin
        BA[i] := BA[i-1] xor BA[i];
    end;
    BA[0] := BA[5] xor $2a;

end;

procedure AntiEpt(var BA: array of byte);
var
    i:smallint;
    mTmp:byte;
begin
    //断言数据位数
    Assert(Length(BA)=8,'The Length is NOT Correct!');
    BA[0] := $2a xor BA[5];
    for i:=1 to 5 do
    begin
        BA[i] := BA[i-1] xor BA[i];
    end;
end;

//检查报文是否正确。
function IsArrayValid(AByteAry : array of byte):Boolean;
var
    i,mHigh : integer;
    mByte : byte;
begin
    //检查报文头部
    if (AByteAry[0] <> $0f)
        or (AByteAry[1] <> $f0) then
    begin
        Result := False;
        Exit;
    end;
    //mLen为AByteAry最后
    mHigh := Length(AByteAry)-1;
    //将$d2和所有报文作异或
    mByte := $d2;
    for i:=0 to mHigh-1 do
    begin
        mByte := mByte xor AByteAry[i];
    end;
    //检查校验位
    if mByte <> AByteAry[mHigh] then Result := False
    else Result := True;
end;

function CalCheck(BA : array of byte;ALow,AHigh:smallint):Byte;
var
    mByte:byte;
    i:smallint;
begin
    mByte := $d2;
    for i:=ALow to AHigh do
    begin
        mByte := mByte xor BA[i];
    end;
    Result := mByte;
end;

//加密数据
function Encrypt(AByte: byte):byte;
var
    mByte3,mByte6: byte;
begin
    //取第三位
    mByte3 := AByte and $8;
    //第三位移动第六位
    mByte3 := mByte3 shl 3;
    //取第六位
    mByte6 := AByte and $40;
    //第6位移动第3位
    mByte6 := mByte6 shr 3;
    //第6位\第3位交换位置
    AByte := AByte or mByte3;
    AByte := AByte or mByte6;
    //和$5d异或
    Result := (AByte xor $5d);
end;

//解密数据
function AntiEncrypt(AByte: byte):byte;
var
    mByte3,mByte6: byte;
begin
    //和$5d异或
    AByte := (AByte xor $5d);
    //取第三位
    mByte3 := AByte and $8;
    //第三位移动第六位
    mByte3 := mByte3 shl 3;
    //取第六位
    mByte6 := AByte and $40;
    //第6位移动第3位
    mByte6 := mByte6 shr 3;
    //第6位\第3位交换位置
    AByte := AByte or mByte3;
    AByte := AByte or mByte6;
    Result := AByte;
end;

function ComStrToInt(AComStr:string):smallint;
var
    mLen: integer;
    mResult: string;
begin
    mLen := Length(AComStr);
    mResult := Copy(AComStr,4,mLen-3);
    Result := StrToInt(mResult);
end;

function EncryptStr(AStr:string):string;
begin
    Result := AStr;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -