Ver Mensaje Individual
  #1  
Antiguo 26-10-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Reputación: 12
aguml Va por buen camino
Ayuda para dejar mas simple este codigo

Hola amigos, he conseguido esta funcion la cual hace una especie de crc muy particular de un texto y quiero dejarlo lo mas simple posible sin tantos castings ya que otras similares lo he conseguido y se que esta se puede pero no lo consigo. Aqui la funcion:
Código PHP:
AnsiString CalcularValorLIC(char *cadena,int sizebuffer)
{
    
signed char caracter;
    
unsigned long valor1valor2valor3valor4;
    
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) * retval) * valor2;
                
retval valor3;
            } while (
contador sizefilelic);
        }
    }

    return 
AnsiString().sprintf("%09lu"retval);

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 he ir sumando y creando el crc.
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 PHP:
do {
                if (
caracter == 0x1A)
                    break;
                
caracter = *reinterpret_cast<signed char*>(sizefilelic cadena 1);
                ++
sizefilelic;
            } while (
caracter); 
La dejo asi:
Código PHP:
do {
                if (
caracter == 0x1A)
                    break;
                ++
sizefilelic;
                
caracter cadena[sizefilelic];
            } while (
caracter); 
Eso quiero hacer con todo el codigo para que sea lo mas sencillo para yo entenderlo.

Última edición por aguml fecha: 26-10-2016 a las 23:18:17.
Responder Con Cita