Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-08-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Número gigantes a Hexadecimal y visceversa

Buenas tardes, tengo el siguiente problema, cuando genero un GUID, quitando los guiones y llaves me queda un hexadecimal y requiero convertirlo a un número y de un número igualmente grande requiero convertirlo a hexadecimal, de antemano, muchas gracias.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #2  
Antiguo 31-08-2011
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Hola.
Puedes usar las funciones BinToHex y HexToBin, que te convierten de arrays de bytes a strings hexadecimales y viceversa respectivamente.

Un saludo,
LoPiTaL
Responder Con Cita
  #3  
Antiguo 31-08-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
gracias por responder LoPiTaL, casualmente se me había ocurrido algo por el estilo, pero no encontré algún ejemplo de convertir un string al binario y de binario a hexadecimal, necesitaría convertir esto E80BE67759E943559A65F02FAC6F6E83 a un string de números, y que este string de números lo pueda convertir nuevamente al valor inicial, si sabes de algún link donde expliquen algo parecido te agradeceré mucho, saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #4  
Antiguo 31-08-2011
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Aquí tienes un link donde muestran un ejemplo de las dos funciones, usando para ello el nº PI con 10 bytes.

http://delphi.about.com/od/beginners...tlHexToBin.htm

Te presento un código escrito en el navegador sólo como ejemplo.
Código Delphi [-]
var
  E: array[0..NBytes-1] of Byte;
  //Make sure there is room for null terminator
  Buf: array[0..NBytes * 2-1] of AnsiChar;
begin
  //Debes inicializar Buf para que contenga los caracteres que tú quieres...
  Buf[0]:='E';
  Buf[1]:='8';
  //etc...
  HexToBin(Buf, E,NBytes*2-1);
end;
y con eso te lo convertirá de strings a array de bytes.

Si no quieres usar array de AnsiChars, puedes usar también una AnsiString.
Es cuestión de ir probando.

Un saludo,
LoPiTaL

Última edición por ecfisa fecha: 31-08-2011 a las 19:23:38. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #5  
Antiguo 02-09-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 mightydragonlor.

Otra opción puede ser:
Código Delphi [-]
...
const
   B_BIN: array [0..15] of string= ('0000','0001','0010','0011','0100','0101','0110','0111',
                                    '1000','1001','1010','1011','1100','1101','1110','1111');
   B_HEX: array [0..15] of char=  ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');

function HexadecimalBinario(Value:string):string;
var
  i:integer;
begin
  for i:= 1 to Length(Value) do
    if not (Value[i] in ['0'..'9','A'..'F']) then
      raise Exception.Create('Número hexadecimal inválido');
  for i:= Length(Value) downto 1 do
    Result:= B_BIN[StrToInt('$'+Value[i])] + Result;
end;

function BinarioHexadecimal(Value:string):string;
var
  i,n:integer;
  Nbl:string;
begin
  for i:= 1 to Length(Value) do
    if not (Value[i] in ['0','1']) then
      raise Exception.Create('Número binario inválido');
  Value:= Value + Copy('000', 1, Length(Value) mod 4);
  for i:=0 to (Length(Value) shr 2)-1 do
  begin
    Nbl:= Copy(Value,(i shl 2)+1,4);
    n:= 8;
    while (Nbl<> B_BIN[n]) do
      if Nbl > B_BIN[n] then Inc(n) else Dec(n);
    Result:= Result + B_HEX[n];
  end;
end;
...

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 02-09-2011 a las 05:02:32.
Responder Con Cita
  #6  
Antiguo 10-09-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Hola a todos, no había podido dar repuesta por tanto trabajo, pero les cuento:
un hexadecimal EBD0A0A2B9E5443387C068B6B72699C7 lo convierto a decimal 313451834834061278758346828331453159879 así

Código Delphi [-]
{Convierte un hexadecimal en un TBCD}
 Function HexToBCD(s : string) : TBcd;
 var
   bb : Byte;
   cc : Char;
 begin
  Result := 0;
  s := UpperCase(s);
  for bb := 1 to Length(s) do
  begin
   Result := Result * 16;
   cc := s[bb];
   case cc of
    '0'..'9': Result:= Result + ord(cc) - ord('0');
    'A'..'F': Result:= Result + ord(cc) - ord('A')+10;
   else raise EConvertError.Create('Se ha encontrado un caráctar no valido.');
   end;
  end;
 end;

y desde el hexadecimal lo paso a binario 1110101111010000101000001010001010111001111001010100010000110011100001111100000001101000101101101011 0111001001101001100111000111 así

Código Delphi [-]
 {Convierte un hexadecimal en un binario}
Function HexToBin(Hexadecimal:string):string;
 const
      BCD: array [0..15] of string=
        ('0000','0001','0010','0011','0100','0101','0110','0111',
         '1000','1001','1010','1011','1100','1101','1110','1111');
 var
    i:integer;
 begin
    for i:=Length(Hexadecimal) downto 1 do
      Result:=BCD[StrToInt('$'+Hexadecimal[i])]+Result;
end;

desde el binario lo puedo pasar al hexadecimal así

Código Delphi [-]
{Convierte un binario a hexadecimal}
function BinToHex(Binario:string):string;
 const
      BCD: array [0..15] of string=
        ('0000','0001','0010','0011','0100','0101','0110','0111',
         '1000','1001','1010','1011','1100','1101','1110','1111');
      HEX: array [0..15] of char=
        ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
 var
    i,n:integer;
    sTemp:string;
    sNibble:string;
 begin
    Result:='';
    sTemp:=Binario+Copy('000',1,Length(Binario) mod 4);
    for i:=0 to (Length(Binario) shr 2)-1 do
    begin
     sNibble:=Copy(sTemp,(i shl 2)+1,4);
     n:=8;
     while (sNibble <> BCD[n]) do
       if sNibble < BCD[n] then Dec(n) else Inc(n);
     Result:=Result+HEX[n];
    end;
 end;
El gran problema es que desde el décimal no he podido pasarlo a hexadecimal, alguna idea?
__________________
mas confundido que Garavito el día del Niño.
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
Codigo Hexadecimal kdemia Varios 18 06-05-2014 12:56:48
Resta Hexadecimal ??? Ðαяισš Varios 6 15-09-2010 11:34:17
Numero hexadecimal de 32 caracteres adebonis Varios 2 15-11-2007 15:11:14
Como convierto un número binario a hexadecimal abdel Varios 3 30-05-2004 17:21:46
de Hexadecimal a Decimal Carlos A Ortega Varios 1 04-08-2003 22:14:56


La franja horaria es GMT +2. Ahora son las 16:03:45.


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