Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Convertir código C++ a Delphi (para lograr un cierto "CRC" de una cadena de entrada) (https://www.clubdelphi.com/foros/showthread.php?t=94452)

dec 05-03-2020 20:03:28

Hola a todos,

Cita:

Empezado por ecfisa (Mensaje 536121)
Hola David.

A ver si entendí bien, ¿ El resultado esperado es 5320 ? por que de ser así el codigo que probé anteriormente me da ese resultado, no obtengo el valor 22586.

Saludos :)

¿Qué código has probado? No será ninguno de los "intentos" que yo he puesto arriba, ¿no? Me cachis... a mí me da ese 22586 y además en ambos casos... en ambos "ButtonClicks"... ¿cómo es que puede darte a ti 5320? ¿Acaso por la versión de Delphi? Yo uso (de hecho es un requerimiento en este caso) Delphi 2007.

¡Gracias, ecfisa, por tu ayuda!

dec 05-03-2020 20:12:49

Hola a todos,

¡ecfisa! A ver si lo que has probado ha sido el código de scafandra... :D :D

¡escafandra! En efecto, tú código produce el resultado esperado, empero, fíjate cómo obtengo yo el resultado "para mostrarlo"... no sé si es la forma más adecuada... aunque parece funcionar, es decir, obtengo el tan deseado 5320... como una cadena...

Código Delphi [-]
var
  S: String;
  CRC: ABYTE;
  Result: string;
begin
  S:= '13|0000123|1|Maximilian|Mustermann|05051999|21092019';
  CRC := CCITTx1D0F(PAnsiChar(S), Length(S));

  Result := IntToHex(CRC[0], 0) + IntToHex(CRC[1], 0);

  // En efecto, se muestra 5320
  ShowMessage(Result);
end;

Me queda la duda de que esa sea la mejor forma de obtener finalmente el valor 5320... pero está claro que os debo una... sino dos... porque me habéis salvado de esta tarea: ahora sólo queda implementarlo dentro de un plugin que a su vez será usado en el programa que necesita calcular el CRC de marras...

Sin vosotros me hubiera sido imposible... y es que uno está muy falto de conocimientos, o, al menos, de los conocimientos que aquí sin duda eran necesarios. Espero poder responderos de alguna manera en otra ocasión, aunque, con vuestro nivel... tendrá que ser invitándoos a un refrigerio. :)

dec 06-03-2020 11:15:04

Hola a todos,

He dicho arriba que me quedaba la duda de si sería o no lo más correcto usar "IntToHex" para obtener el resultado como una cadena. Mayormente, me lo preguntaba porque si probaba con otra cadena de entrada, obtenía resultados del tipo: 1B07, es decir, no numéricos, es decir, no como: 5320.

No sé si será la mejor forma usar "IntToHex", pero, no se me había ocurrido probar con el programa en C++... y, en efecto, este también produce resultados del tipo: 1B07, de modo que, asumo que, aunque "IntToHex" no sea acaso lo mejor, lo cierto es que parece funcionar... al menos tal como lo hace el programa en C++.

En fin, ya tengo todo esto (la función de escafandra) dentro del "plugin" en el que tenía que ir. :)

¡Muchas gracias de nuevo por vuestra ayuda!

escafandra 06-03-2020 11:26:29

La forma de representarlo en texto debe ser con IntToHex, el problema es que quizás el dato de deba manejar como array de Bytes y no como texto. Eso quiere decir que quizás deberías devolver el resultado CRC como Bytes y preparar una función para pasar a texto cuando proceda. Así lo tienes todo cubierto.


Saludos.

dec 06-03-2020 12:42:06

Hola a todos,

Cita:

Empezado por escafandra (Mensaje 536139)
La forma de representarlo en texto debe ser con IntToHex, el problema es que quizás el dato de deba manejar como array de Bytes y no como texto. Eso quiere decir que quizás deberías devolver el resultado CRC como Bytes y preparar una función para pasar a texto cuando proceda. Así lo tienes todo cubierto.


Saludos.

Gracias por aclarar mi primera duda: parece que IntToHex es correcto, en este caso. Ciertamente, el resultado del programa C++ es también una cadena... porque el programa "se para ahí", no va más allá... de modo que llevas razón: tal vez lo que interese sean los "bytes", y, aquí tendríamos acaso un problema *, pero, ya veremos si es así o no: me lo dirán, supongo, si no pueden hacer lo que necesiten.

* El problema es que esto tiene que implementarse en NeoBook, cierto programa para Windows (desarrollado con Delphi, por cierto), más concretamente como un plugin de este programa, y, ahí no existen tipos como "byte", todo son cadenas o números. Pero bueno, no voy a adelantar acontecimientos... el resultado del programa de C++ es el mismo ahora que en Delphi: tal vez con esto sea suficiente.

¡Muchas gracias de nuevo a todos por vuestra ayuda! :)


La franja horaria es GMT +2. Ahora son las 09:36:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi