Se me ocurre algo asi:
Código PHP:
#include <intypes.h>
bool dividirHex(AnsiString dividendo, AnsiString divisor, AnsiString *cociente, AnsiString *Resto)
{
__uint64 auxDividendo, auxDivisor, auxCociente=0, auxResto=0;
bool salir=false;
bool retval=false;
int largoDividendo, largoDivisor, largoPorcion, pos;
*cociente="";
*resto="";
largoDivisor=divisor.Lenght();
auxDivisor=sprintf("%UINT64", AnsiString ("0x" + divisor).c_str ());
do {
largoDividendo=dividendo.Lenght ();
largoPorcion=largoDivisor;
if (largoDividendo >= largoDivisor){
if(auxDivisor > sprintf("%UINT64", AnsiString ("0x" + dividendo.SubString(1,largoPorcion)).c_str()){
if(largoDividendo > largoDivisor){
largoPorcion++;
}else{
break;
}
}
auxDividendo=sprintf("%UINT64", AnsiString ("0x" + dividendo.SubString(1,largoPorcion)).c_str());
auxResto=auxDividendo % auxDivisor;
dividendo=dividendo.SubString(largoPorcion, largoDividendo);
auxCociente=auxDividendo / auxDivisor;
*cociente=*cociente + AnsiString (auxCociente);
*resto=AnsiString(auxResto);
if (auxResto > 0)
dividendo= *resto + dividendo.SubString(largoPorcion,largoDividendo);
else
dividendo= dividendo.SubString(largoPorcion,largoDividendo);
retval=true;
}else{
salir=true;
}
}while(!salir);
return retval;
}
Lo he escrito en el móvil y no está probado. ¿que os parece? Creo que lo que le faltaría es saber si el cociente desborda el int64 y si es así salir con false pero no se como comprobar eso. Supongo que seria obteniendo el valor máximo de un int64 y luego comparó carácter por carácter contra la cadena del cociente de izquierda a derecha mientras sean iguales hasta llegar al último o hasta que sea mayor el del dividendo. Si es mayor salgo del bucle y retorno false. Si es menor salgo del bucle y continuo con lo demás.