Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2011
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Gracias a ambos por responder.
le detallo mejor el problema:
Mi cliente me debe pasar un numero de 30 dígitos por telefono (no tengo otro medio ) y esto me acarrea 2 inconvenientes.
1- el cliente no debe percatarse del dato que me esta pasando (por eso la encriptación).
2-Debo reducir los mas posible este dato para evitar algún error al dictarme el numero.

Por eso lo 1° que se me vino a la mente es en ves de pasar a base 16 (hexadecimal) pasarlo a base 35 y asi utilizar los caracteres del abecedario(reduciendo los caracteres que me dicta y a la ves no se percatara del dato que me esta pasando).
pero no me es sencillo ya que para pasar entre base en algún momento tendré que dividir y el numero de 30 dígito es muy largo incluso para ponerlo en una variable Int64

Por eso necesito de su ayuda para ver si me ayudan a pasar un numero de 30 dígitos de base 10 (guardado en un string)a base 35 y la operación inversa.
O si se le ocurre alguna otra manera para solucionar el inconveniente.

siguiendo la lógica que indico ñuño no me pasa correctamente al intentar de pasar el numero 36 a base 35 me debería dar Z0

Última edición por acertij022 fecha: 14-04-2011 a las 04:27:02.
Responder Con Cita
  #2  
Antiguo 14-04-2011
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Analizando un poco la base debería ser 32 ya que el 32 equivale en binario al número 11111 con lo cual el pasaje seria pasar el string que contiene el numero en base 10 a binario y separar el resultado en grupos de de 5 y colocar su equivalente en base 32 y multiplicando el numero según la posición. es decir
34 en base 10
100010 en base 2
1 00010 lo separo en grupo de 5
1 2 lo paso cada grupo a su equivalente en base 32

y por ultimo multiplico según la posición 1 x 32 + 2 = V2

entonces 34 en base 10 es igual a V2 en base 32

¿Es correcta mi deducción?
Responder Con Cita
  #3  
Antiguo 14-04-2011
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Otra manera mas sencilla que encontre.
suponiendo que tenemos el numero 2314 en base 10

2334/32 = 72 resto = 10
72/32 = 2 resto 8
con lo cual nos queda 28A

y el proceso inverso:
A *1 + 8* 32 + 2 *32 * 32 = 2314

El inconveniente ahora que tengo es:
¿en que tipo de variable lo puedo poner para luego realizar la división ya que los 30 dígitos no entra en un Int64?
Responder Con Cita
  #4  
Antiguo 14-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola acertijo022.

Número base 10 a base n:
Código Delphi [-]
function Base10ABaseN(Numero: Longint; const Base: Byte): string;
var
  i: Integer;
  NumAux: string;
  Modulo: Integer;
begin
  NumAux:='';
  repeat
    Modulo := Numero mod Base;
    Numero := Numero div Base;
    if Modulo > 9 then
      NumAux:= NumAux + chr(Modulo + 55)
    else
      NumAux:= NumAux + chr(Modulo + 48);
  until Numero <=0;
  for i := Length(NumAux) downto 1 do
    Result:= Result + NumAux[i];
end;

Número base N a base 10:
Código Delphi [-]
function BaseNABase10(Num : string; n : byte): Integer;
const
  Car = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; // límite: base 36
var
  i : Byte;
begin
  Result:=0;
  for i:= 1 to Length(Num) do
    Result:= Result * n + Pos(Upcase(Num[i]), Car) - 1;
end;

Llamadas de ejemplo usando el número 2314 con base 32 y 36:
Código Delphi [-]
  (* Numero en base 10 a base 32 *)
  ShowMessage(Base10ABaseN(2314, 32)); // 28A
  ShowMessage(Base10ABaseN(2314, 36)); // 1SA
  (* Numero en base 32 a base 10 *)
  ShowMessage(IntToStr(BaseNABase10('28A', 32)));// 2314
  ShowMessage(IntToStr(BaseNABase10('1SA', 36)));// 2314
  ...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 14-04-2011 a las 18:00:28.
Responder Con Cita
  #5  
Antiguo 14-04-2011
Avatar de acertij022
acertij022 acertij022 is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina-Bs. As.
Posts: 233
Poder: 22
acertij022 Va por buen camino
Gracias ecfisa eso justamente lo que necesitaba.
Responder Con Cita
  #6  
Antiguo 14-04-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Y, ¿cómo se resuelve lo de que el número de 30 dígitos no cabe en un Int64 (menos en un longint)?

// Saludos
Responder Con Cita
  #7  
Antiguo 14-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por roman Ver Mensaje
Y, ¿cómo se resuelve lo de que el número de 30 dígitos no cabe en un Int64 (menos en un longint)?

// Saludos
Ups, se me escapó ese 'detalle'...

Supongo que diciéndole al cliente que limite el número a 999999999999999999.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-04-2011 a las 01:12:50.
Responder Con Cita
Respuesta



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
Comprimir Roxy188 Varios 1 23-09-2008 23:52:18
comprimir AVI con la API zidfrid API de Windows 0 20-06-2007 22:40:28
comprimir AVI con la API. zidfrid C++ Builder 1 06-06-2007 22:18:11
Comprimir con UPX Mr.Vaka Varios 6 29-12-2005 14:00:50
comprimir un jpg User_baja1 Gráficos 1 08-07-2005 11:47:56


La franja horaria es GMT +2. Ahora son las 04:21:14.


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