请帮我翻译十几行java代码为delphi

andrewleeyou 2008-11-25 07:29:31
/**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;
}
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
长沙三毛 2008-11-25
  • 打赏
  • 举报
回复
1)在函数里不能有array of byte形式
2)在产生a时给值
3)Edit1.Text 有 ff 0a ca,先要转换为数组,然后。。。
andrewleeyou 2008-11-25
  • 打赏
  • 举报
回复
function Tform1.mjComCRC(buf: Array of byte): byte; // 计算 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,如何做呢?
长沙三毛 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 andrewleeyou 的回复:]
谢谢哈。。。我测试完正确的话就给分。。。。
[/Quote]对操作符号或数值:
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;
andrewleeyou 2008-11-25
  • 打赏
  • 举报
回复
谢谢哈。。。我测试完正确的话就给分。。。。
长沙三毛 2008-11-25
  • 打赏
  • 举报
回复
unit Unit1;

interface

uses
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;

implementation

function 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.

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧