FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Dec, ¿Cual versión de Delphi estas utilizando?. Al migrar algoritmos similares desde Delphi 5 a Delphi XE3 ha sido necesario cambiar el tipo de datos de la variable que contiene la DATA de "String" a "AnsiString".
PostData: Ya hice la prueba y en este caso el cambiar a Ansistring no afecta el comportamiento. Última edición por orodriguezca fecha: 18-02-2020 a las 20:06:35. |
#2
|
||||
|
||||
Hola David.
Aunque tarde, por que ya el trabajo está hecho, te pongo los códigos que usé para mis pruebas. C++ Código PHP:
Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 18-02-2020 a las 20:57:02. |
#3
|
||||
|
||||
Cita:
La versión C++ funciona Ok pero la delphi tiene un pequeño error. El bucle principal debe ser:
Esto se debe a que en la versión C primero decrementa y en la delphi es después. Posiblemente ha sido que has publicado un código no terminado en lugar del final. Saludos. |
#4
|
||||
|
||||
Hola escafandra.
Fijate que en la línea en que obtengo la longitud de cadena hago uso de la función Pred. Dado el valor 3077, tanto la versión de C++ como la de Delphi 10.3 arrojan el resultado 5320. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 19-02-2020 a las 05:23:27. |
#5
|
||||
|
||||
Correcto.
Saludos. |
#6
|
||||
|
||||
Hola a todos,
Cita:
Gracias de nuevo a todos, ecfisa, escafandra, mamcx, en efecto, estoy esperando a ver qué me dicen sobre la necesidad de inicializar la variable "crc" con el valor "3077"... pues de otra forma no parece obtenerse el valor apropiado. Sea como sea, estoy seguro de que algo falla / falta en el código de ejemplo que me ofrecieron, es decir, vosotros no falláis, eso lo tengo claro: de modo que veremos a ver en qué queda todo esto. ¡En cuanto me digan algo lo publico aquí! |
#7
|
||||
|
||||
Hola a todos,
Por fin he conseguido más información sobre el tema que se trata aquí... y ahora estoy seguro de que es posible convertir el código a Delphi, vaya, de que vosotros sabréis hacerlo, puesto que yo, aunque lo he intentado... no he sido capaz... En efecto, el código de que se partía al principio no estaba completo, sino que faltaba información, según lo veo yo, principalmente, los tipos de las variables de entrada y de salida, o bien podía deducirse todo del siguiente código... que es el "programa" completo: Código:
using System; using System.Text; namespace QRCode { class Program { static void Main(string[] args) { byte[] b = Encoding.Default.GetBytes("13|0000123|1|Maximilian|Mustermann|05051999|21092019"); byte[] crc = CCITTx1D0F(b, b.Length); // Podemos ver una salida = 5320, que, es la esperada para la cadena de entrada Console.WriteLine( $"{crc[0]:X2}{crc[1]:X2}" ); Console.ReadLine(); } static private byte[] CCITTx1D0F(byte[] data, int len) { int i, x = 0; ushort crc = 0x1D0F; int count = len; 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); } return BitConverter.GetBytes(crc); } } } Desde ya os agradezco vuestra ayuda a todos. |
#8
|
||||
|
||||
Hola a todos de nuevo,
Quería añadir... que, en este caso, es importante tener en cuenta que la versión de Delphi habrá de ser la Delphi 2007... por si hay que tenerlo en cuenta... |
#9
|
||||
|
||||
Hola a todos,
Aquí los intentos que llevo a cabo, usando tanto el código de escafandra como el de ecfisa, dando ambos el mismo resultado: 22586, pero, no el esperado: 5320, la madre que le parió.
|
#10
|
||||
|
||||
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
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#11
|
||||
|
||||
Hola a todos,
Cita:
¡Gracias, ecfisa, por tu ayuda! |
#12
|
||||
|
||||
Traducción cuasi literal:
Uso:
Consideraciones: 1. En C un array de Char es una cadena. Un unsigned char es un BYTE. Con estas consideraciones y teniendo en cuenta que se introduce una cadena, podemos usar PAnsyChar como parametro de entrada. Tambien podríamos unsa un array de bytes pero requeriría casting de entrada. 2. el CRC es un word pasado a array de 2 Bytes. El resultado del word es 8275 que en hexadecimal es $2053 pero visto como array de bytes es $53, $20 Saludos. |
#13
|
||||
|
||||
Hola a todos,
¡ecfisa! A ver si lo que has probado ha sido el código de scafandra... ¡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...
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. Última edición por dec fecha: 06-03-2020 a las 10:58:52. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda para Convertir Todo este código en Function | MaxiDucoli | Internet | 3 | 01-10-2017 22:29:07 |
Convertir cadena aleatoria en cadena de N caracteres | DANY | OOP | 3 | 12-03-2009 20:49:21 |
Problemas para validar entrada de datos en delphi 7 | Nelly | Varios | 1 | 27-03-2007 23:31:25 |
Tengo un lio con cierto código | David | OOP | 11 | 13-10-2006 20:07:34 |
Concatenar Cadena Larga dentro de codigo Delphi | JoanKa | Conexión con bases de datos | 6 | 04-03-2005 17:53:44 |
|