Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/10/2016, 03:37
aguml
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Respuesta: Dar mas sencillez a este codigo

Bueno, tirando de tu codigo lo he dejado lo mas pequeño posible y haciendo pruebas da los mismos resultados que la original asi que asi la dejo:
Código C++:
Ver original
  1. AnsiString CalcularValorLIC(char *cadena,int sizebuffer)
  2. {
  3.     unsigned long resto = 0;
  4.     unsigned long retval = 0;
  5.  
  6.     for(int contador = 0; contador < sizebuffer; ++contador)
  7.     {
  8.         resto = resto ^ cadena[contador] + contador;
  9.         retval = (cadena[(resto % (sizebuffer + 1)) + 1] + resto + (cadena[contador] + resto) * 2 + retval) * resto;
  10.     }
  11.     return AnsiString().sprintf("%09lu", retval);
  12. }

Los cast aquí no son necesarios ya que funciona perfecto sin ellos.
El bucle que obtiene el tamaño del buffer no era necesario ya que ya introduzco el tamaño como parametro y la comprobación de cada caracter con 0x1A tampoco la necesito en mi caso porque todos serán caracteres imprimibles.
He quitado variables que no son necesarias para nada.
Un detalle, lo que tu dices que en C compila perfectamente a mi no me compila. Que yo sepa eso esta prohibido en C, se puede declarar variables al principio del ambito del for pero no en la estructura de creación de éste. No se si es porque eso cambio con alguna versión y yo tengo alguna anticuada pero ese es mi caso jejeje.