这段代码有些看不懂,有没有高人解释下,另外改成C#如何改
Crc算法函数:
procedure ByteCrc(data:byte;var crc:word);
VAR
i:BYTE;
BEGIN
FOR i:=0 TO 7 DO
BEGIN
IF ((data and $01)XOR(crc AND $0001)<>0) THEN
BEGIN
crc:=crc shr 1;
crc:= crc XOR $A001;
END
ELSE crc:=crc shr 1;
data:=data shr 1;
END;
END;
function GetStringCrc10(s:shortstring):String;
var
len,i:integer;
CRC16:word;
tmpStr: string;
begin
CRC16:=0;
len:=length(s);
for i:=1 to len do
begin
bytecrc(ord(s[i]),CRC16);
end;
tmpStr := '00000' + InttoStr(CRC16);
tmpStr := copy(tmpStr, length(tmpStr)-5+1, 5);
Result := tmpStr;
end;
Crc算法函数:
procedure ByteCrc(data:byte;var crc:word);
VAR
i:BYTE;
BEGIN
FOR i:=0 TO 7 DO
BEGIN
IF ((data and $01)XOR(crc AND $0001)<>0) THEN
BEGIN
crc:=crc shr 1;
crc:= crc XOR $A001;
END
ELSE crc:=crc shr 1;
data:=data shr 1;
END;
END;
function GetStringCrc10(s:shortstring):String;
var
len,i:integer;
CRC16:word;
tmpStr: string;
begin
CRC16:=0;
len:=length(s);
for i:=1 to len do
begin
bytecrc(ord(s[i]),CRC16);
end;
tmpStr := '00000' + InttoStr(CRC16);
tmpStr := copy(tmpStr, length(tmpStr)-5+1, 5);
Result := tmpStr;
end;
IF ((data and $01)XOR(crc AND $0001)<>0)里面的 and 是逻辑与,XOR是异或
$A001 表示的是十六进制数A001,
length(s)表示变量s内容的长度,比如,如果s的值是'asdf'那么length(s)就是4
copy(s,start,end)截取自字符串
ord('a')就是十进制的97,也就是ASCII码,是整数
for 循环应该能看懂吧
翻译成C#对应的不就得了?C#的不懂,不好意思