Código C++:
Lo que hace es recorrer un buffer y con una serie de operaciones obtiene la posicion de un byte con el que realizar mas operaciones e ir sumando y creando el crc.Ver original
AnsiString CalcularValorLIC(char *cadena,int sizebuffer) { signed char caracter; unsigned long valor1, valor2, valor3, valor4; unsigned long contador; unsigned long sizefilelic; unsigned long retval = 0; if (cadena) { caracter = *cadena; sizefilelic = 0; if (caracter) { do { if (caracter == 0x1A) break; caracter = *reinterpret_cast<signed char*>(sizefilelic + cadena + 1); ++sizefilelic; } while (caracter); } contador = 0; valor2 = 0; valor3 = sizefilelic; retval = valor3; if (valor3) { valor4 = valor3 + 1; do { valor1 = static_cast<unsigned long>(*reinterpret_cast<unsigned char*>(contador + reinterpret_cast<unsigned long>(cadena))); valor2 = valor2 ^ valor1 + contador; ++contador; valor3 = (*reinterpret_cast<unsigned char*>(valor2 % valor4 + reinterpret_cast<unsigned long>(cadena) + 1) + valor2 + (valor1 + valor2) * 2 + retval) * valor2; retval = valor3; } while (contador < sizefilelic); } } }
He intentado quitarle los castings pero no doy con el modo y creo que lo hago mal y por eso da valores diferentes, porque no respeto correctamente el tema de los parentesis o algo asi.
¿podrian ayudarme a dejarlo lo mas claro posible para alguien como yo que no entiendo mucho de castings y cosas asi?
Por ejemplo esa parte si que se:
Código C++:
La dejo asi:Ver original
do { if (caracter == 0x1A) break; caracter = *reinterpret_cast<signed char*>(sizefilelic + cadena + 1); ++sizefilelic; } while (caracter);
Código C++:
Eso quiero hacer con todo el codigo para que sea lo mas sencillo para yo entenderlo.Ver original
do { if (caracter == 0x1A) break; ++sizefilelic; caracter = cadena[sizefilelic]; } while (caracter);
Lo que me falta por modificar creo que tiene que quedar algo tal que asi:
Código C++:
Pero creo que hago algo mal. Ver original
*********** do { * * * * * * * * valor1 =cadena [contador]; * * * * * * * * valor2 = valor2 ^ valor1 + contador; * * * * * * * * ++contador; * * * * * * * * valor3 = (cadena [(valor2 % valor4) + 1] + valor2 + (valor1 + valor2) * 2 + retval) * valor2; * * * * * * * * retval = valor3; * * * * * * } while (contador < sizefilelic);