c:
static unsigned char LRC(auchMsg,usDataLen)
unsigned char *auchMsg ; /* 要進行計算的訊息 */
unsigned short usDataLen ; /* LRC 要處理的位元組的數量*/
{ unsigned char uchLRC = 0 ; /* LRC 位元組初始化 */
while (usDataLen--) /* 傳送訊息 */
uchLRC += *auchMsg++ ; /* 累加*/
return ((unsigned char)(-((char_uchLRC))) ;
}
2:Delphi(Pascal) code
function GetLRC(AData: array of Byte; iLen: Integer): Byte;
var
iLoop : Integer;
begin
Result := 0;
for iLoop := 0 to iLen - 1 do Result := Result + AData[iLoop];
Result := Result xor $FF + 1;
end;
function GetHexString(AData: array of Byte; iLen: Integer): String;
var
iLoop: Integer;
begin
Result := '';
for iLoop := 0 to iLen - 1 do
Result := Result + IntToHex(AData[iLoop], 2);
Result := Result + IntToHex(GetLRC(AData, iLen), 2);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
AData: array[0..5] of Byte;
begin
AData[0] := $01;
AData[1] := $02;
AData[2] := $00;
AData[3] := $00;
AData[4] := $00;
AData[5] := $01;
ShowMessage(GetHexString(AData, 6));
end;
3:C# code
static byte LRC(byte[] data)
{
byte lrc = 0;
foreach (byte c in data)
{
lrc += c;
}
return (byte)-lrc;
}