Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir de hexadecimal a decimal (https://www.clubdelphi.com/foros/showthread.php?t=2303)

CRIS 17-07-2003 13:38:41

Convertir de hexadecimal a decimal
 
Hola chicos aqui estoy de nuevo tengo un problema, necesito pasar de hexadecimal a decimal pero entre los digitos lleva un signo - (menos), como puedo pasar todos los digitos y que ignore el signo - (menos) esta es la cantidad que necesito pasar
A5FE-E0C2-65DA

Muxas gracias.CRIS.

marcoszorrilla 17-07-2003 14:01:17

Prueba con esta función que he creado sobre la marcha:

Código:

Function HexToInt(S:String):LongInt;
begin
Result:=StrToInt( '$'+Copy( S, 1, Length(s) ) )
end;

Como es lógico habrás de pasarle el número en Hexadecimal, por lo que queda de tu cuenta utilizar el código oportuno para quitar los guiones, que supongo son separadores.

Un Saludo.

marcoszorrilla 17-07-2003 14:25:58

Por si lo que querías era únicamente quitar el guión:

Código:

Function QuitaMenos(S:String):String;
begin

  while Pos('-', S) > 0 do
  Delete(s,Pos('-', S),1);

  Result:=S;
end;

Le tienes que pasar una cadena, por ejemplo:
QuitaMenos('ABC-DDD');

Un Saludo.

CRIS 17-07-2003 16:06:43

Ya funciona muxas grasiaaaaaassss ole ole ole.

Salu2.CRIS.

delphi.com.ar 17-07-2003 16:16:05

Cita:

Posteado originalmente por CRIS
¿y ahora como lo paso a decimal?
La respuesta de Marcos es para pasarlo a decimal, la inversa es IntToHex...

Saludos!

CRIS 17-07-2003 19:59:58

Hola chicos parecia que iba bien pero pasa una cosa, si el en hexadecimal tenemos dos numero iguales seguidos o dos letras ya no sale bien la conversion, me sale una cantidad que no se asemeja a la cantidad real y ademas sale un signo - (menos) delante de la cantidad resultante. Si el hexagecimal tiene digitos que no se repiten seguidos va perfecto pero si hay dos iguales ya me sale lo comentado.

Salu2.CRIS.

delphi.com.ar 17-07-2003 20:03:19

Me parece que lo que tu quieres convertir no es un hexadecimal "puro", para llamarlo de alguna manera. No se que significan los - que tienen en el medio, pero un hexadecimal se escriben del mismo modo que los números decimales con la salvedad que cambia la base de 10 a 16 de 0..10 o 0..F

¿Qué son esos datos que nos muestras?

CRIS 18-07-2003 07:07:32

Hola pues esos datos son el numero de serie del disco duro, pero como ya he dicho antes, me sale el signo menos entre los digitos, por eso queria quitarle el guion y despues convertirlo a decimal, bueno chicos a ver si se os ocurre algo.Sal2.CRIS.

marcoszorrilla 18-07-2003 08:15:09

Para obtener el número de volumen del disco duro:

Código:

function GetVolumeID(DriveChar: Char): String;
            var
              MaxFileNameLength, VolFlags, SerNum: DWord;
            begin
              if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
                  @SerNum, MaxFileNameLength, VolFlags, nil, 0)
              then
              begin
                Result := IntToHex(SerNum,8);
                Insert('-', Result, 5);
              end
              else
                  Result := '';
            end;

Un Saludo.

CRIS 18-07-2003 13:25:47

Hola, aqui pongo el codigo que yo hago para todo lo que necesito hacer, primero averiguo el numero de serie del hd despues le quito el signo (-) y despues lo convierto a decimal.
1.º El numero de serie es este 90A0-03FE
2.º Al quitarle el signo - se queda en 90A003FE
3.º Y al convertirlo me da -1868561410
¿que hago mal? aqui teneis el codigo.

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
SpeedButton1: TSpeedButton;
Edit1: TEdit;
procedure FormActivate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

Function QuitaMenos(S:String):String;
begin

while Pos('-', S) > 0 do
Delete(s,Pos('-', S),1);

Result:=S;
end;
function HexToInt(const Value: String): Integer;
begin
Result := StrToInt('$' + Value);
end;


function GetVolumeID(DriveChar: Char): String;
var
MaxFileNameLength, VolFlags, SerNum: DWord;
begin
if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
@SerNum, MaxFileNameLength, VolFlags, nil, 0)
then
begin
Result := IntToHex(SerNum,8);
Insert('', Result, 5);
end
else
Result := '';
end;



{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
Label1.Caption:=GetVolumeId('c');
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin

Label2.Caption:=IntToStr( HexToInt(label1.Caption) );


end;

end.


Salu2.CRIS.

marcoszorrilla 18-07-2003 14:51:19

Como la funcion de obtención del número de volumen del disco ya devuelve un número no veo porque se ha de pasar a hexadecimal, para despues volverlo a decimal, le hacemos los siguientes mínimos cambios y ya estaría arreglado el problema.

Código:

function GetVolumeID(DriveChar: Char): String;
var
MaxFileNameLength, VolFlags, SerNum: DWord;
begin
  if GetVolumeInformation(PChar(DriveChar + ':\'), nil, 0,
  @SerNum, MaxFileNameLength, VolFlags, nil, 0)
  then
    begin
    Result := IntToStr(SerNum);
    end
    else
    Result := '';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=GetVolumeID('C');
end;

Un Saludo.

marcoszorrilla 18-07-2003 14:57:27

Por error pegue código que no tenía nada que ver con la función obtener el número del volumen del disco duro, gracias a Andrés que me lo ha comunicado he recitificado dicha función

Un Saludo.

mqm 13-11-2006 12:41:22

Pasar de Hex a decimal
 
He probado las funciones que poneis. Pero que pasa cuando el valor de entrada es un string de 14 caracteres:
00000f0ffb3555

El resultado según la calculadora cientifica de windows deberia ser 64692630869
haciendo las pruebas oportunas con distintas funciones no me sale esto.
Esto viene que tengo que leer una secuncia de 14 caracteres.

seoane 13-11-2006 14:02:33

Hola mqm, bienvenido al foro, si te apetece echale un vistazo a la guia de estilo, para saber como funciona todo por aquí.

En cuanto a tu pregunta no dices con que funciones probaste, ni que error te daban, ni tampoco que versión de delphi utilizas, así que vamos a suponer que no probaste con StrToInt64. Es decir:

Código Delphi [-]
var
  i: int64;
begin
  i:= StrToInt64('$00000f0ffb3555');
  ShowMessage(IntToStr(i));
end;


La franja horaria es GMT +2. Ahora son las 03:01:05.

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