Blade_Is_One,
Cita:
Empezado por Blade_Is_One
El problema que tengo es que necesito usar este algoritmo que me entregaron en C# y lo debo implementar en un sistema hecho en Delphi
|
Cita:
Empezado por mamcx
Cuando te enfrentes a estas cosas, lo que debes hacer es concentrarte en que problema tienes, no en el codigo concreto. Que es lo que hace? Como se llama el algoritmo usado? y entonces buscas una implementacion en Delphi que logre lo mismo.
|
No soy experto en
C# pero según entiendo el algoritmo realiza : El Cálculo del
CRC16 de un String en base al
Polinomio Generador $A001.
Revisa este código:
Código Delphi
[-]
Library CRC;
uses
SysUtils, Classes, Dialogs, StrUtils, Math;
{$R *.res}
function Crc16(Buffer : String; Polynom, Initial : Cardinal) : Cardinal;
var
i,j : Integer;
begin
Result := Initial;
for i := 1 to Length(Buffer) do
begin
Result := Result xor ord(buffer[i]);
for j := 0 to 7 do
begin
if (Result and $0001) <> 0 then
Result := (Result shr 1) xor Polynom
else
Result := Result shr 1;
end;
end;
end;
function ComputeChecksum(Buffer : PChar) : Cardinal; stdcall;
var
i : Cardinal;
CrcTable : Array[0..255] of Cardinal;
begin
for i := 0 to 255 do
CrcTable[i] := Crc16(chr(i), $A001, 0);
Result := 0;
for i := 1 to Length(Buffer) do
Result := (Result shr 8) xor CrcTable[(ord(Buffer[i]) xor Result) and $ff];
end;
exports
ComputeChecksum;
end.
El código anterior Calcula el
CRC16 de un String en base al
Polinomio Generador $A001 por medio de la función exportada
ComputeChecksum de la DLL CRC.
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
function ComputeChecksum(Buffer : PChar) : Cardinal; StdCall; external 'CRC.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(ComputeChecksum(PChar(Edit1.Text))));
end;
end.
El código anterior utiliza la DLL CRC para el cálculo del
CRC16 de un String.
Revisa estos Links:
Quizás esta solución se pueda adaptar a tu proyecto.
Espero sea útil
Nelson.