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 17-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 17-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 17-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Ya funciona muxas grasiaaaaaassss ole ole ole.

Salu2.CRIS.

Última edición por CRIS fecha: 17-07-2003 a las 17:35:46.
Responder Con Cita
  #5  
Antiguo 17-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #6  
Antiguo 17-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
Unhappy

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.
Responder Con Cita
  #7  
Antiguo 17-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #8  
Antiguo 18-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 18-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.

Última edición por marcoszorrilla fecha: 18-07-2003 a las 15:59:21.
Responder Con Cita
  #10  
Antiguo 18-07-2003
CRIS CRIS is offline
Miembro
 
Registrado: jul 2003
Posts: 63
Poder: 21
CRIS Va por buen camino
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.
Responder Con Cita
  #11  
Antiguo 18-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
Responder Con Cita
  #12  
Antiguo 18-07-2003
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.

Última edición por marcoszorrilla fecha: 18-07-2003 a las 16:20:39.
Responder Con Cita
  #13  
Antiguo 13-11-2006
mqm mqm is offline
Registrado
 
Registrado: nov 2006
Posts: 3
Poder: 0
mqm Va por buen camino
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.
Responder Con Cita
  #14  
Antiguo 13-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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;
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


La franja horaria es GMT +2. Ahora son las 18:26:54.


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