Mi idea es dejarlo así más o menos:
Código PHP:
AnsiString CalcularValorLIC(char *cadena,int sizebuffer)
{
unsigned long valor1, valor2 = 0, valor3;
unsigned long contador = 0;
unsigned long sizefilelic = 0;
unsigned long retval = 0;
do {
if (cadena[sizefilelic] == 0x1A)
break;
++sizefilelic;
} while(cadena[sizefilelic]);
valor3 = sizefilelic;
do {
valor1 = cadena [contador];
valor2 = valor2 ^ valor1 + contador;
retval = (cadena [(valor2 % (sizefilelic + 1)) + 1] + valor2 + (valor1 + valor2) * 2 + valor3) * valor2;
++contador;
} while (contador < sizefilelic);
return AnsiString().sprintf("%09lu", retval);
}
Ya que es seguro que en el buffer mio siempre va a haber una cadena ya que se forma a partir de una constante con lo que por lo menos la constante estará así que sobran tantos if. Ahora el caso es si el código que yo he modificado es capaz de realizar la misma tarea o me equivoqué en algo (lo más seguro). Si veis algo erróneo en la conversión del código por favor decidme.