这段代码有些看不懂,有没有高人解释下,另外改成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;

解决方案 »

  1.   

    crc数据校验,先去了解一下crc是什么,说到翻译,也没必要吧,现成的c#代码网上太多了
      

  2.   

    本人对delphi不了解,求高手解读,急需要把此段程序转换成C#
      

  3.   

    你就是几个运算符号没弄明白吧?shr逻辑右移,
    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#的不懂,不好意思