/**CRC16算法实现
* 参数 buf 为 CRC16的数据源
* return 为CRC16的结果(只对16位有效)
*/
public static int mjComCRC(byte buf[]) {
int len = buf.length;
int crc,chr,i,j;
crc = 0xffff;
for(j=0; j <len; ++j){
chr = buf[j] & 0xff;
crc ^= chr;
for(i=0;i <8;i++) {
if ((crc & 01)!=0)
crc = (crc>>1)^0xa001;
else
crc = crc>>1;
}
crc &= 0xffff;
}
return crc;
}
* 参数 buf 为 CRC16的数据源
* return 为CRC16的结果(只对16位有效)
*/
public static int mjComCRC(byte buf[]) {
int len = buf.length;
int crc,chr,i,j;
crc = 0xffff;
for(j=0; j <len; ++j){
chr = buf[j] & 0xff;
crc ^= chr;
for(i=0;i <8;i++) {
if ((crc & 01)!=0)
crc = (crc>>1)^0xa001;
else
crc = crc>>1;
}
crc &= 0xffff;
}
return crc;
}
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type TArray = array of byte; // 定义动态数组 TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;function mjComCRC(buf: TArray): integer; // 公共函数var
Form1: TForm1;implementationfunction mjComCRC(buf: TArray): integer; // 计算 crc
var
crc, chr, i, j: integer;
begin
crc := $ffff;
for j := Low(buf) to High(buf) do begin // 不需要长度变量 len
chr := buf[j] and $ff;
crc := crc xor chr;
for i := 0 to 7 do begin
if (crc and 01) <> 0 then
crc := (crc shr 1) xor $a001
else
crc := crc shr 1;
crc := crc and $ffff;
end;
end;
Result := crc;
end;procedure TForm1.Button1Click(Sender: TObject);
var
a: TArray;
n, i: integer;
begin
SetLength(a, 10); // 设置动态数组
for i := Low(a) to High(a) do
a[i] := i; n := mjComCRC(a); // 测试
showmessage(inttostr(n));
end;end.
0xffff $ffff 十六进指
& and 位与
^ xor 位异或
>> shr 右移位
复合运算符:a += b 等价 a := a + b
错了一个地方 crc := $ffff;
for j := Low(buf) to High(buf) do begin // 不需要长度变量 len
chr := buf[j] and $ff;
crc := crc xor chr;
for i := 0 to 7 do begin
if (crc and 01) <> 0 then
crc := (crc shr 1) xor $a001
else
crc := crc shr 1;
end;
crc := crc and $ffff; // 外循环
end;
Result := crc;
var
crc, chr, i, j: integer;
begin
crc := $ffff;
for j := Low(buf) to High(buf) do begin // 不需要长度变量 len
chr := buf[j] and $ff;
crc := crc xor chr;
for i := 0 to 7 do begin
if (crc and 01) <> 0 then
crc := (crc shr 1) xor $a001
else
crc := crc shr 1;
end;
crc := crc and $ffff; // 外循环
end;
Result := crc;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a: array of byte;
n, i: integer;
begin
SetLength(a, 10); // 设置动态数组
for i := Low(a) to High(a) do
a[i] := i;
n := mjComCRC(a); // 测试
showmessage(inttostr(n));
end;
=====================================
问题一:
我把你那个动态数组 TArray = array of byte; 不要 buf: Array of byte
a: array of byte;
改了这俩地方可以吗????????????问题二:
a 怎么赋值
只能 a[0]:=ff;
a[1]:=0a;
a[2]:=ca;
可不可以一次性的赋值呢?问题三:
我想在一个Edit.text内输入 ff 0a ca,这样直接赋值给a,如何做呢?
2)在产生a时给值
3)Edit1.Text 有 ff 0a ca,先要转换为数组,然后