Hola a todos,
Me han encargado cierta tarea para la que no parezco estar capacitado... creo que el código C++ que me han pasado debería ser más completo, en todo caso, pero, como no controlo C++... tampoco sé hasta qué punto algunas partes del código pueden deducirse, por decirlo así...
El código en cuestión es el siguiente:
Código:
while (--count >= 0)
{
ushort z = (ushort)(data[x++] << 8);
crc = (ushort)(crc ^ z);
i = 8;
do
{
if ((crc & 0x8000) != 0)
crc = (ushort)(crc << 1 ^ 0x1021);
else
crc = (ushort)(crc << 1);
} while (--i > 0);
}
Se supone que "data" es una cadena tal que la siguiente, mejor dicho, una cadena exactamente como la siguiente:
Cita:
13|0000123|1|Maximilian|Mustermann|05051999|21092019
|
Dicho "data" debería producir un "CRC" exactamente igual a:
5320
Hay cosas que se me escapan, como la variable "x", que, entiendo que es la posición / caracter, de la variable "data". De este modo, he conseguido armar el siguiente código... que ya me sorprende que compile... y se ejecute sin errores aparentes...
Código Delphi
[-]
var
S: string;
I, X: Integer;
Z: UInt;
CRC: Word;
SLength, N: Integer;
begin
S := '13|0000123|1|Maximilian|Mustermann|05051999|21092019';
SLength := Length(S);
X := 0;
CRC := 0;
while SLength >= 0 do
begin
Z := Word(S[X]) shl 8;
CRC := CRC xor Z;
for I := 8 downto 0 do
begin
if (CRC and $08000) <> 0 then
CRC := (CRC shl 1) xor $1021
else
CRC := (CRC shl 1);
end;
Inc(X);
Dec(SLength);
end;
ShowMessage(IntToStr(CRC));
end;
Sin embargo, el resultado que obtengo en "CRC", es 30841, o sea, no 5320. Por otro lado, si no inicializo la variable CRC, es decir, el siguiente código:
Código Delphi
[-]
var
S: string;
I, X: Integer;
Z: UInt;
CRC: Word;
SLength, N: Integer;
begin
S := '13|0000123|1|Maximilian|Mustermann|05051999|21092019';
SLength := Length(S);
X := 0;
while SLength >= 0 do
begin
Z := Word(S[X]) shl 8;
CRC := CRC xor Z;
for I := 8 downto 0 do
begin
if (CRC and $08000) <> 0 then
CRC := (CRC shl 1) xor $1021
else
CRC := (CRC shl 1);
end;
Inc(X);
Dec(SLength);
end;
ShowMessage(IntToStr(CRC));
end;
... sigo sin obtener el resultado esperado... en fin... reconozco que estoy perdido: porque no sé si estoy traduciendo el código C++ en condiciones (diría que no), porque, o sé siquiera cómo es que se puede ejecutar el código Delphi mostrado sin errores... y, finalmente, porque no sé si es que el código que me han dado para traducir... en realidad no puede traducirse, puesto que falten datos...
¿Alguna posible ayuda?
¡Muchísimas gracias de antemano!
