Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
¿Cómo convertir un integer a hexadecimal?

Hola que tal,
e estado intentado convertir un integer a un hexadecimal, que de como resultado:

Código:
[size - 16]

08 2A 65 13 42 65 98 22 45 00 00 00 00 00 00 00 // por que no corresponde el valor integer al este hexa
El valor integer que utilizo es 256312456892254

por ejemplo si yo convierto string a HEX:

Código Delphi [-]
function StringToHex(S: String): string;
var I: Integer;
begin
  Result:= '';
  for I := 1 to length (S) do
    Result:= Result+IntToHex(ord(S[i]),2);
end;

function HexToString(H: String): String;
var I: Integer;
begin
  Result:= '';
  for I := 1 to length (H) div 2 do
    Result:= Result+Char(StrToInt('$'+Copy(H,(I-1)*2+1,2)));
end;

y luego trato de pasar hex a string me genera un un hexa diferente.
utilizo el siguiente archivo.

UBigIntsV3.rar

Código Delphi [-]
function StrHexaToUInt64Str(const stringHexadecimal: String): string;
var
  unBigInteger:TInteger;
begin
  unBigInteger:=TInteger.Create;
  try
    // stringHexadecimal parameter is passed without the '$' symbol
    // ex: stringHexadecimal:='FFAA0256' and not '$FFAA0256'
    unBigInteger.AssignHex(stringHexadecimal);
    //the boolean value determine if we want to add the thousand separator or not.
    Result:=unBigInteger.converttoDecimalString(false);
  finally
    unBigInteger.free;
  end;
end;

Como hago para generar el mismo hexadecimal. lo que trato de hacer encontrar una función que genere lo mismo.
yo desconozco que función utilicen para generar ese raro valor hexadecimal con integer de 15


gracias por su respuesta

Última edición por elmago00 fecha: 18-11-2014 a las 21:32:25.
Responder Con Cita
  #2  
Antiguo 19-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
elmago00,

Cita:
Empezado por elmago00
...¿Cómo convertir un Integer a Hexadecimal?...El valor Integer que utilizo es 256312456892254...Como hago para generar el mismo hexadecimal 082A6513426598224500000000000000...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Convertir Decimal a Hexadecimal
function DecToHex(Dec : UInt64): String;
var
   Hex : String;
   Rst : UInt64;

begin

   repeat

      Rst := Dec Mod 16;

      if Rst = 10 Then Hex := 'A';
      if Rst = 11 Then Hex := 'B';
      if Rst = 12 Then Hex := 'C';
      if Rst = 13 Then Hex := 'D';
      if Rst = 14 Then Hex := 'E';
      if Rst = 15 Then Hex := 'F';
      if Rst in [0..9] then Hex := IntToStr(Rst);

      Result := Result + Hex;

      Dec := Dec shr 4;

   until (Dec = 0);

   Result := ReverseString(Result);

end;

// Convertir Hexadecimal a Decimal
function HexToDec(Hex : String): UInt64;
var
   i : Integer;
   M : UInt64;

begin

   Result:=0;

   M := 1;

   Hex := AnsiUpperCase(Hex);

   for i := Length(Hex) downto 1 do
   begin

      case Hex[i] of
        '1'..'9' : Result := Result + (Ord(Hex[i]) - Ord('0')) * M;
        'A'..'F' : Result := Result + (Ord(Hex[i]) - Ord('A') + 10) * M;
      end;

      M := M shl 4;

   end;

end;

// Convertir Decimal a Hexadecimal
procedure TForm1.Button1Click(Sender: TObject);
begin
   Edit2.Text := DecToHex(StrToInt64(Edit1.Text));
end;

// Convertir Hexadecimal a Decimal
procedure TForm1.Button2Click(Sender: TObject);
begin
   Edit2.Text := IntToStr(HexToDec(Edit1.Text));
end;

end.
El código anterior en Delphi 2010 bajo Windows 7 Professional x32, convierte números de Decimal a Hexadecimal y viceversa, como se puede ver en la siguiente imagen:



Notas:

1- El rango de números enteros que puede manejar el código propuesto es de 0 a 2^64 - 1 (Tipo UInt64).

2- El número hexadecimal 082A6513426598224500000000000000 no es el equivalente del número decimal 256312456892254, como se puede ver en la siguiente imagen :



Tomado de : Conversor binario/decimal/hexadecimal

3- Para números tan grandes (Como el hexadecimal 082A6513426598224500000000000000), se requiere de una librería aritmética de precisión arbitraria, te sugiero consultar:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 19-11-2014 a las 05:53:21.
Responder Con Cita
  #3  
Antiguo 19-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
elmago00,

Cita:
Empezado por elmago00
...¿Cómo convertir un Integer a Hexadecimal?...El valor Integer que utilizo es 256312456892254...Como hago para generar el mismo hexadecimal 082A6513426598224500000000000000...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, StrUtils, UBigIntsV4;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Convertir Decimal a Hexadecimal
procedure TForm1.Button1Click(Sender: TObject);
var
   Hex : TInteger;
begin
   Hex := TInteger.Create(0);
   Hex.Assign(Edit1.Text);
   Edit2.Text := Hex.ConvertToHexString;
   Hex.Free;
end;

// Convertir Hexadecimal a Decimal
procedure TForm1.Button2Click(Sender: TObject);
var
   Dec : TInteger;
begin
   Dec := TInteger.Create(0);
   Dec.AssignHex(Edit1.Text);
   Edit2.Text := Dec.ConvertToDecimalString(False);
   Dec.Free;
end;

end.
El código anterior en Delphi 2010 bajo Windows 7 Professional x32, convierte números de Decimal a Hexadecimal y viceversa por medio de DFF Library, como se puede ver en la siguiente imagen:



Espero sea útil

Nelson.
Responder Con Cita
  #4  
Antiguo 19-11-2014
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 elmago00
Cita:
Empezado por elmago00 Ver Mensaje
...
El valor integer que utilizo es 256312456892254
...
Otra opción para la librería estándar Delphi:
Código Delphi [-]
...

function IntToHex64(Num: Int64): string;
var
  Resto: Int64;
begin
  Result:= '';
  while (Num > 0) do
  begin
    Resto := Num mod 16;
    Num   := Num div 16;
    Result:= IntToHex(Resto, 1) + Result
  end
end;

// Decimal a hexadecimal
procedure TForm1.btnToHexClick(Sender: TObject);
begin
  EditHex.Text:= IntToHex64(StrToInt64(EditDec.Text));
end;

// Hexadecimal a decimal
procedure TForm1.btnToDecClick(Sender: TObject);
begin
  EditDec.Text:= IntToStr(StrToInt64('$' + EditHex.Text));
end;



Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 20-11-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Gracias Nelson y ecfisa resolvieron gran parte de mi problema, ahora solo me queda una pregunta,

como puedo separar la cadena del Tedit en gruppo de 2.

por ejemplo :256312456892254 quisiera que quedara en string.

var1: 25
var2: 63

etc

e intentado pero solo puedo separarlo en array de char, pero los necesito en string, y debido que el TEdit no puedo usar identificador o separador, parar separar el string, se me dificulta y tampoco puedo especificar un valor, por que el usuario debe insertarlo.

si tienen tiempo para ayudarme con esto ultimo, se los agradecería mucho.

mil gracias por ayudarme siempre.

Última edición por elmago00 fecha: 20-11-2014 a las 20:31:58.
Responder Con Cita
  #6  
Antiguo 20-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
elmago00,

Cita:
Empezado por elmago00
...como puedo separar la cadena del TEdit en grupos de 2...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
   SL : TStringList;

begin

   SL := TStringList.Create;

   for i := 1 to Length(Edit1.Text) do
   begin
      if (i mod 2) = 0 then
         SL.Add(Copy(Edit1.Text,i-1,2));
   end;

   if (Length(Edit1.Text) mod 2) <> 0 then
      SL.Add(Copy(Edit1.Text,Length(Edit1.Text),1));

   ListBox1.Clear;

   for i := 0 to SL.Count - 1 do
      ListBox1.Items.Add(SL.Strings[i]);

   SL.Free;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, permite dividir un número en grupos de 2, como se puede ver en la siguiente imagen:



Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 20-11-2014 a las 21:58:36.
Responder Con Cita
  #7  
Antiguo 20-11-2014
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 elmago00 Ver Mensaje
como puedo separar la cadena del Tedit en gruppo de 2.

por ejemplo :256312456892254 quisiera que quedara en string.

var1: 25
var2: 63

etc
En ese caso creo que te conviene hacerlo a mano...
Código Delphi [-]
...
var
  s1,s2,s3,s4,s5,s6,s7,s8: string;


procedure TForm1.btnSepararClick(Sender: TObject);
begin
  with Edit1 do
  begin
    s1:= Copy(Text,1,2);
    s2:= Copy(Text,3,2);
    s3:= Copy(Text,5,2);
    s4:= Copy(Text,7,2);
    s5:= Copy(Text,9,2);
    s6:= Copy(Text,11,2);
    s7:= Copy(Text,13,2);
    s8:= Copy(Text,15,2);
  end;
  Edit2.Text:= Format('%s %s %s %s %s %s %s %s',[s1,s2,s3,s4,s5,s6,s7,s8]);
end;



Aunque logicamente, al ser un total de 15 caracteres, no es posible almacenar dos caracteres por variable ...

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 20-11-2014 a las 21:58:35.
Responder Con Cita
  #8  
Antiguo 21-11-2014
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 el mago00.

Para ampliar opciones, otro modo de asignar las duplas a las variables:
Código Delphi [-]
...
procedure HexToVars(HexStr: string; v: array of Pointer);
var
  c,i: Integer;
begin
  i:= Low(v);
  c:= 1;
  while i <= High(v) do
  begin
    string(v[i]^):= Copy(HexStr, c, 2);
    Inc(c, 2);
    Inc(i);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  v1,v2,v3,v4,v5,v6,v7,v8: string;
begin
  HexToVars('256312456892254', [@v1,@v2,@v3,@v4,@v5,@v6,@v7,@v8]);
  ShowMessage(Format('%s %s %s %s %s %s %s %s',[v1,v2,v3,v4,v5,v6,v7,v8]));
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 21-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muy ingenioso.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Convertir Binario a Hexadecimal. JoseFco ASM y Microcontroladores 21 30-10-2008 23:43:31
convertir int o char a hexadecimal. bactering C++ Builder 2 05-10-2008 22:18:45
¿Cómo convertir de word a integer? bluegene Varios 16 19-03-2007 23:31:18
String Hexadecimal '000CB2' a Cardinal o Integer onlytk Varios 2 06-11-2005 18:24:38
Como Convertir un dato Integer ó Float a String en FireBird???? AGAG4 Firebird e Interbase 8 04-12-2004 03:59:47


La franja horaria es GMT +2. Ahora son las 00:42:19.


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