Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2016
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda a pasar este código a firemonkey. elmago00 FireMonkey 55 08-01-2015 15:25:18
ayuda con este codigo kurono Varios 5 02-04-2014 00:25:11
ayuda con este codigo kurono Varios 4 13-06-2008 01:03:29
necesito ayuda con este codigo kurono Varios 4 06-05-2008 07:02:07
procedimiento almacenado ayuda con este codigo pipecato Varios 5 16-12-2005 12:24:34


La franja horaria es GMT +2. Ahora son las 16:26:50.


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
Copyright 1996-2007 Club Delphi